其他分享
首页 > 其他分享> > POJ3278-Catch That Cow

POJ3278-Catch That Cow

作者:互联网

题意:

john在位置为N的点,他的cow在位置为K的点,john有两种行进方式,①花一分钟时间从X移到X+1或X-1;②花一分钟时间从X到2*X; cow的位置不变,john最少需要多久能到K抓住cow

思路:

如果N>K,那么John只能一步一步往后走,用时为N-K

否则的话,用BFS搜索,每一个走到的点入队,记录到该点的用时,直到到达K点

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<queue>
 5 #include<cstring>
 6 using namespace std;
 7 const int MAXX = 100001;
 8 bool vis[100005];
 9 int step[100005];
10 int main()
11 {
12     int n,k;
13     int cnt = 0;
14     cin>>n>>k;
15     memset(step,0,sizeof(step));
16     memset(vis,0,sizeof(vis));
17     if(n>k)
18     {
19         cout<<n-k<<endl;
20         return 0;
21     }
22     queue<int> Q;
23     Q.push(n);
24     vis[n] = true;
25     step[n] = 0;
26     while(!Q.empty())
27     {
28         int x;
29         int tmp = Q.front();
30         Q.pop();
31         for(int i = 0;i<3;i++)
32         {
33             if(i==0) 
34                 x = tmp * 2;
35             else if(i==1) 
36                 x = tmp + 1;
37             else if(i==2)
38                 x = tmp - 1;
39             if(!vis[x]&&x>=0&&x<=100000)//没有走过且不超出边界
40             {
41                 step[x] = step[tmp] + 1;//用时+1
42                 vis[x] = true;
43                 Q.push(x);
44             }
45             if(x == k)//到达K点
46             {
47                 cout<<step[x]<<endl;
48                 return 0;
49             }
50         }
51     }
52     return 0;
53 }

 

标签:john,cow,Cow,int,POJ3278,vis,step,Catch,include
来源: https://www.cnblogs.com/IceeeE/p/10588766.html