Catch That Cow HDU - 2717

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.
科幻大片BFS系列
 1 #include <iostream>
 2 using namespace std;
 3 #include<string.h>
 4 #include<set>
 5 #include<stdio.h>
 6 #include<math.h>
 7 #include<queue>
 8 #include<map>
 9 #include<algorithm>
10 #include<cstdio>
11 #include<cmath>
12 #include<cstring>
13 struct lll
14 {
15     int x,bu;
16 }s;
17 
18 int max1=210000;
19 int main()
20 {
21 
22     int n,m;
23     while(cin>>n>>m)
24     {
25         map<int, int >a;
26         queue<lll >TM;
27         s.x=n;
28         s.bu=0;
29         a[s.x]=1;
30         TM.push(s);
31         while(!TM.empty())
32         {
33             if(TM.front().x==m)
34                 break;
35             s.x=TM.front().x+1;
36             s.bu=TM.front().bu+1;
37             if(s.x>=0&&s.x<max1&&a[s.x]==0)
38             {
39                 a[s.x]=1;
40                 TM.push(s);
41             }
42             s.x=TM.front().x-1;
43             s.bu=TM.front().bu+1;
44             if(s.x>=0&&s.x<max1&&a[s.x]==0)
45             {
46                 a[s.x]=1;
47                 TM.push(s);
48             }
49             s.x=TM.front().x*2;
50             s.bu=TM.front().bu+1;
51             if(s.x>=0&&s.x<max1&&a[s.x]==0)
52             {
53                 a[s.x]=1;
54                 TM.push(s);
55             }
56             TM.pop();
57         }
58         cout<<TM.front().bu<<endl;
59     }
60     return 0;
61 }
View Code

 

posted @ 2017-08-02 10:52  小小超plus  阅读(179)  评论(0编辑  收藏  举报