感觉对于那种到达某个地方,求最短步数的题目用bfs真是极好的!而且这还是道基础题
需要注意的地方:
1.走过的x坐标要用v数组标记,免得重复走
2.入队时记住判断一下是否在范围内,即x坐标要在0到100000之间。
#include<iostream>
#include<string>
#include<algorithm>
#include<queue>
#define M 100500
using namespace std;
typedef struct
{
int time,x;
}farmer;
int n,k,ans,v[M];
int bfs()
{
int temp;
queue<farmer> q;
farmer f;
f.time=0;
f.x=n;
v[f.x]=1;
q.push(f);
while(1)
{
f=q.front();
q.pop();
temp=f.x;
if(f.x==k)
return f.time;
f.time++;
f.x=temp+1;
if(!v[f.x])
{
q.push(f);
v[f.x]=1;
}
f.x=temp-1;
if(f.x>=0&&!v[f.x])
{
q.push(f);
v[f.x]=1;
}
f.x=temp*2;
if(f.x<=M&&!v[f.x])
{
q.push(f);
v[f.x]=1;
}
}
}
int main()
{
cin>>n>>k;
memset(v,0,sizeof(v));
cout<<bfs()<<endl;
}