这是一个简单的BFS,如果使用STL中的队列可以更简单的解决这个问题.
之前就是一直RE,找不到原因.后来发现在传送时将当前坐标*2去判断有没有被标记时会越界,导致RE.
加一个判断条件,只有农民当前坐标小于牛所在的坐标时才会进行传送.
在我不会STL的队列时我也经常用结构体模拟队列,虽然STL的队列也可以用结构体定义,但是有些麻烦,
所以我听取了舍友建议,用标记数组来进行步数记录
具体代码如下:
#include<iostream>
#include<queue>
#include<string.h>
using namespace std;
queue<int> q;
int vis[200005];
int main()
{
int n,k;
while (cin>>n>>k)
{
memset(vis,0,sizeof(vis));
int x,tx;
q.push(n);
vis[n]=1;
x=n;
while (!q.empty())
{
x=q.front();
if (x==k)
break;
tx=x-1;
if (vis[tx]==0)
{
q.push(tx);
vis[tx]=vis[x]+1;
}
tx=x+1;
if (vis[tx]==0)
{
q.push(tx);
vis[tx]=vis[x]+1;
}
tx=x*2;
if (x<k&&vis[tx]==0)
{
q.push(tx);
vis[tx]=vis[x]+1;
}
q.pop();
}
cout<<vis[x]-1<<endl;
while (!q.empty())
q.pop();
}
return 0;
}