这是一个一维的变形,
当n<k时,有三种移动情况:移动到当前位置加一,减一,或者当前位置的二倍的位置。
当n>k时,只有一种情况:减一。
//#include<bits/stdc++.h> //POJ不支持,HDU支持
#include<cstdio>
#include<cstring>
using namespace std;
const int N=200005; //如果N=100005在HDU是过不了的,POJ能过
int dir[3][2]={1,1,1,-1,2,0};
int used[N]; //标记数组范围是(n/2)-(k+1),不会超过100005
struct maze
{
int x,num;
}q[N];
int n,k;
void bfs()
{
int head=0,tail=0,i,x,a; //这里head=tail=0代表清空队列
used[n]=1;
q[tail].x=n;
q[tail].num=0;
tail++;
while(head<tail)
{
x=q[head].x;
for(i=0;i<3;i++)
{
a=x*dir[i][0]+dir[i][1];
if(!used[a]&&a>=0&&a<=k+1) //a的取值范围为0-(k+1)
{
used[a]=1;
q[tail].x=a;
q[tail].num=q[head].num+1;
if(a==k)
{
printf("%d\n",q[tail].num);
return ;
}
tail++;
}
}
head++;
}
}
int main()
{
while(~scanf("%d%d",&n,&k))
{
memset(used,0,sizeof(used));
if(n>=k)
{
printf("%d\n",n-k);
continue;
}
else bfs();
}
return 0;
}