题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int n,m;
int vis[100005];
struct Node
{
int pos,step;
};
queue<Node>q;
Node k,l;
bool judge(Node x)
{
if(x.pos<0||x.pos>100000)
return 0;
if(vis[x.pos]==1)
return 0;
return 1;
}
int bfs(int n)
{
k.pos=n;
k.step=0;
vis[k.pos]=1;
q.push(k);
while(!q.empty())
{
k=q.front();
q.pop();
if(k.pos==m)
return k.step;
l.pos=k.pos+1;
if(judge(l))
{
vis[l.pos]=1;
l.step=k.step+1;
q.push(l);
}
l.pos=k.pos-1;
if(judge(l))
{
vis[l.pos]=1;
l.step=k.step+1;
q.push(l);
}
l.pos=k.pos*2;
if(judge(l))
{
vis[l.pos]=1;
l.step=k.step+1;
q.push(l);
}
}
return -1;
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(vis,0,sizeof(vis));
printf("%d\n",bfs(n));
}
return 0;
}