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