直接 bfs,沒啥說了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int s,e,ans;
int queue[2000000];
bool visited[100002];
bool ok(int n){
return n>=0&&n<=100000;
}
void bfs(){
int front,rear;
front=rear=0;
queue[rear++]=s;
queue[rear++]=0;
while(front<rear){
int first=queue[front++];
int step=queue[front++];
if(first==e){ans=step;return;}
for(int i=0;i<3;i++){
int tmp;
if(i==0)tmp=first-1;
if(i==1)tmp=first+1;
if(i==2)tmp=first*2;
if(ok(tmp)&&!visited[tmp]){
if(tmp==e){ans=step+1;return;}
visited[tmp]=true;
queue[rear++]=tmp;
queue[rear++]=step+1;
}
}
}
}
int main(){
while(scanf("%d%d",&s,&e)==2){
memset(visited,false,sizeof(visited));
visited[s]=true;
ans=0;
bfs();
printf("%d\n",ans);
}
}