HDU 2717 Catch That Cow (bfs)
Posted 风中的簌雨
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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?
* 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\n",f[k]-1); //减去农夫本来在的位置那一步 46 } 47 return 0; 48 }
以上是关于HDU 2717 Catch That Cow (bfs)的主要内容,如果未能解决你的问题,请参考以下文章