• Catch That Cow (BFS)


    Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting. 

    * Walking: FJ can move from any point X to the points X - 1 or X + 1 in a single minute 
    * Teleporting: FJ can move from any point X to the point 2 × X in a single minute. 

    If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

    InputLine 1: Two space-separated integers: N and KOutputLine 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.Sample Input

    5 17

    Sample Output

    4
    
    
            
     

    Hint

    The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.
    #include <stdio.h>
    #include <string.h>
    #include <queue>
    using namespace std;
    
    const int N = 1000000;
    int map[N+10];
    int n,k;
    struct node
    {
        int x,step;
    };
    
    int check(int x)
    {
        if(x<0 || x>=N || map[x])
            return 0;
        return 1;
    }
    
    int bfs(int x)
    {
        int i;
        queue<node> Q;
        node a,next;
        a.x = x;
        a.step = 0;
        map[x] = 1;
        Q.push(a);
        while(!Q.empty())
        {
            a = Q.front();
            Q.pop();
            if(a.x == k)
                return a.step;
            next = a;
            next.x = a.x+1;
            if(check(next.x))
            {
                next.step = a.step+1;
                map[next.x] = 1;
                Q.push(next);
            }
            next.x = a.x-1;
            if(check(next.x))
            {
                next.step = a.step+1;
                map[next.x] = 1;
                Q.push(next);
            }
            next.x = a.x*2;
            if(check(next.x))
            {
                next.step = a.step+1;
                map[next.x] = 1;
                Q.push(next);
            }
        }
        return -1;
    }
    
    int main()
    {
        int ans;
        while(~scanf("%d%d",&n,&k))
        {
            memset(map,0,sizeof(map));
            ans = bfs(n);
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Android开发学习总结(一)——搭建最新版本的Android开发环境
    数据库服务器编码,数据库编码,数据库表编码,数据库表字段编码
    webservice(二)简单实例
    webservice(一) 概念
    JAVA的StringBuffer类
    Log4J日志配置详解
    如何配置使用 Log4j
    使用MyBatis Generator自动创建代码
    Spring MVC POST中文乱码解决方案
    JSP开发中对jstl的引用方式(标签库引用)
  • 原文地址:https://www.cnblogs.com/edych/p/7237679.html
Copyright © 2020-2023  润新知