zoukankan      html  css  js  c++  java
  • HDU 2717 Catch That Cow (bfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717

    Catch That Cow

    Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 12615    Accepted Submission(s): 3902


    Problem Description
    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?
     
    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.
     
    题目大意:在一条笔直的道路上,有一个农夫在A位置,一头牛在B位置,农夫一次可以搜索三个位置(例如农夫在x位置,他可以搜索x-1、x+1、x*2)问农夫至少需要几步能够找到牛。
    解题思路: 用广搜 ,定义一个位置数组,每次搜索三个位置即可。
    AC代码:
     1 #include <stdio.h>
     2 #include <string.h>
     3 #include <iostream>
     4 #include <algorithm>
     5 #include <stack>
     6 #include <queue>
     7 using namespace std;
     8 int f[200020];  //记录步数 
     9 void bfs(int n,int k)
    10 {
    11     int a[3];  //位置数组 
    12     memset(f,0,sizeof(f));
    13     queue <int > q;
    14     q.push(n);
    15     f[q.front()] = 1;
    16     if (n == k)
    17         return ;
    18     while (!q.empty())
    19     {
    20         int t = q.front();
    21         int x = f[t];
    22         a[0] = t-1;  //三个位置 
    23         a[1] = t+1;
    24         a[2] = t*2;
    25         for (int i = 0; i < 3; i ++)
    26         {
    27             if (a[i] >= 0 && a[i] < 200001 && f[a[i]]==0)  //注意这里的边界值 
    28             {
    29                 q.push(a[i]);
    30                 f[a[i]] = x+1;  //在上一步的基础上加1 
    31             }
    32             if (a[i] == k)
    33                 return ;
    34         }
    35         q.pop();
    36     }
    37 }
    38 int main ()
    39 {
    40     int i;
    41     int n,k;
    42     while (~scanf("%d%d",&n,&k))
    43     {
    44         dfs(n,k);
    45         printf("%d
    ",f[k]-1); //减去农夫本来在的位置那一步 
    46     }
    47     return 0;
    48 }
  • 相关阅读:
    ES6新特性总结
    Flask
    Flask
    Flask
    Flask
    Flask
    Flask
    Flask
    Linux
    Linux
  • 原文地址:https://www.cnblogs.com/yoke/p/5929546.html
Copyright © 2011-2022 走看看