大意:在x轴上可以走到x-1或x+1或2*x的位置,给出起点位置和目标位置,求最小步数。
分析:BFS水题。
代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<cstring>
using namespace std;
int num[100005];
int bfs(int x,int y)
{
queue<int>q;
while(!q.empty())
q.pop();
q.push(x);
num[x]=1;
while(!q.empty())
{
if(q.front()==y)
return num[y];
int m=q.front()+1;
if(m>=0&&m<=100000)
if(!num[m])
{
q.push(m);
num[m]=num[q.front()]+1;
}
int n=q.front()-1;
if(n>=0&&n<=100000)
if(!num[n])
{
q.push(n);
num[n]=num[q.front()]+1;
}
int t=2*q.front();
if(t>=0&&t<=100000)
if(!num[t])
{
q.push(t);
num[t]=num[q.front()]+1;
}
q.pop();
}
}
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
memset(num,0,sizeof(num));
printf("%d\n",bfs(n,k)-1);
}
return 0;
}