zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    mysql导出存储过程、函数、视图、触发器
    通过mk-table-checksum与pt-table-sync检查不同库两张表的一致性。
    Linux内核OOM机制的详细分析
    Linux虚拟内存(VM)相关参数解析
    mysqld异常重启后,自动启动应用srm进程
    利用python多线程执行远程linux上命令
    oracle数据库时常用的操作命令
    Oralce_DDL
    Oralce_PL_SQL
    mysqlbackup备份和还原
  • 原文地址:https://www.cnblogs.com/edych/p/7237679.html
Copyright © 2011-2022 走看看