给出一个牛的坐标n,然后他可以前走一步或者倒退一步,或者直接走到2*n的位置上
直接想到的就是bfs,用一个数列来模拟,先找当前一步能到的地方,放到数组里,之后一层一层找
#include <stdio.h> #include <string.h> #include <queue> #include <iostream> #include <algorithm> #define N 100001 using namespace std; int dis[N]; bool used[N]; queue<int>Q; int init(int n,int k) { while(Q.size()) Q.pop(); memset(dis,0,sizeof(dis)); memset(used,false,sizeof(used)); int ans; Q.push(n); dis[n]=0; used[n]=true; while(Q.size()) { ans=Q.front(); Q.pop(); if(ans-1>=0&&!used[ans-1]) { dis[ans-1]=dis[ans]+1; used[ans-1]=true; Q.push(ans-1); } if(ans+1<N&&!used[ans+1]) { dis[ans+1]=dis[ans]+1; used[ans+1]=true; Q.push(ans+1); } if(ans*2<N&&!used[ans*2]) { dis[ans*2]=dis[ans]+1; used[ans*2]=true; Q.push(ans*2); } if(used[k])break; } return dis[k]; } int main() { int n,k; while(scanf("%d%d",&n,&k)!=EOF) printf("%d\n",init(n,k)); }