题目描述
模板题
C++ 代码
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=3e6+10;
bool st[N];
int d[N];
int a,b;
int bfs(int x){
d[b]=1e9;
if(x>=b){
d[b]=x-b;
return d[b];
}
queue<int> q;
q.push(x);
st[x]=true;
while(q.size()){
auto t=q.front();
q.pop();
if(t==b) return d[b];
int s[3]={t+1,t-1,2*t};
for(int i=0;i<3;i++){
if(!st[s[i]]){
st[s[i]]=true;
if(s[i]>=b){
d[b]=min(d[t]+1+s[i]-b,d[b]);
}
else if(s[i]<b&&s[i]>=0){
d[s[i]]=d[t]+1;
q.push(s[i]);
}
// cout<<d[b]<<endl;
}
}
}
return d[b];
}
int main(){
cin>>a>>b;
int res=bfs(a);
cout<<res<<endl;
return 0;
}