给出一个牛的坐标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));
}

浙公网安备 33010602011771号