题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2717
#include<iostream>
#include<queue>
#include<string>
using namespace std;
bool isval(int x)
{
if(x<0||x>100000)return false;
return true;
}
int s,e;
int f[100002];
struct point
{
int map,step;
};
int bfs()
{
memset(f,0,sizeof(f));
queue<point>Q;
point p;
p.map=s;
p.step=0;
Q.push(p);
while(!Q.empty())
{
point temp=Q.front();
Q.pop();
point next;
next.map=temp.map+1;
if(isval(next.map)&&f[next.map]==0)
{
next.step=temp.step+1;
if(next.map==e)return next.step;
f[temp.map]=1;
Q.push(next);
}
next.map=temp.map-1;
if(isval(next.map)&&f[next.map]==0)
{
next.step=temp.step+1;
if(next.map==e)return next.step;
f[temp.map]=1;
Q.push(next);
}
next.map=temp.map*2;
if(isval(next.map)&&f[next.map]==0)
{
next.step=temp.step+1;
if(next.map==e)return next.step;
f[temp.map]=1;
Q.push(next);
}
}
return 0;
}
int main()
{
while(scanf("%d%d",&s,&e)!=EOF)
{
if(e==s)printf("0\n");
else printf("%d\n",bfs());
}
return 0;
}