Description
* 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
Output
Sample Input
Sample Output
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.
之所以把這個水題貼上,是爲了警戒自己,數組超限與範圍判斷的時候,應該先進行範圍判斷,然後進行數組操作!
#include<stdio.h> #include<string.h> #include<queue> #include<algorithm> using namespace std; int vis[300010]; int bfs(int x,int ans){ queue<int>q; queue<int>num; q.push(x); num.push(0); while(!q.empty()){ int xx = q.front(); int nn = num.front(); num.pop(); q.pop(); if(xx == ans)return nn; if(xx>=0&&vis[xx-1] == 0){ q.push(xx-1); num.push(nn+1); vis[xx-1] = 1; } if(xx+1<=ans&&vis[xx+1] == 0){ q.push(xx+1); num.push(nn+1); vis[xx+1] = 1; } if(2*xx <=ans*2&&vis[2*xx] == 0){ q.push(2*xx); num.push(nn+1); vis[2*xx] = 1; } } } int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ memset(vis,0,sizeof(vis)); vis[n]=1; printf("%d\n",bfs(n,m)); } }