zoukankan      html  css  js  c++  java
  • POJ 3278 Catch That Cow(BFS)

    POJ 3278  Catch That Cow

    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 - 1 or + 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?

    Input

    Line 1: Two space-separated integers: N and K

    Output

    Line 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.
     
    题目大意:一条笔直路上有农夫和牛,牛的位置是固定的,农夫可以前进一步或者后退一步,或者跳到当前位置的两倍处,求最少移动次数
     
    分析:bfs求最短路
     
    代码:
    #include<iostream>
    #include<cstdio> 
    #include<queue>
    using namespace std;
    const int M = 100000;
    queue<int> que;
    int N, K;
    int d[M + 5] = {0};
    void bfs() {
        que.push(N);
        while(que.size()) {
            int cur = que.front();
            que.pop();
            if(cur == K) {
                printf("%d
    ", d[cur]);    
                break;
            }
            if(cur - 1 >= 0 && cur - 1 <= M && !d[cur-1]) {
                que.push(cur - 1);
                d[cur-1] = d[cur] + 1;
            }
            if(cur + 1 >= 0 && cur + 1 <= M && !d[cur+1]) {
                que.push(cur + 1);
                d[cur+1] = d[cur] + 1;
            }
            if(cur * 2 >= 0 && cur * 2 <= M && !d[cur*2]) {
                que.push(cur*2);
                d[cur*2] = d[cur] + 1;
            }
        }
    }
    int main() {
        cin >> N >> K;
        bfs();
        return 0;
    }
    作者:kindleheart
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    [LeetCode] 22. Generate Parentheses
    3. Longest Substring Without Repeating Characters
    Python floor() 函数
    Python fabs() 函数
    Python exp() 函数
    Python cmp() 函数
    Python ceil() 函数
    小样本学习综述
    如何评估两张图片的差异
    网络模型mAP计算实现代码
  • 原文地址:https://www.cnblogs.com/kindleheart/p/9297080.html
Copyright © 2011-2022 走看看