解析:
每次一个点有两种情况,-1 和 *2 两种情况,直接 BFS 即可。
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,m,vis[N],cnt[N];
void bfs(){
queue<int>q;
vis[n]=1;
q.push(n);
while(q.size()){
auto t=q.front();
q.pop();
if(t==m){
cout<<cnt[t];
return;
}
if(t-1>0&&!vis[t-1]){
vis[t-1]=1;
cnt[t-1]=cnt[t]+1;
q.push(t-1);
}
if(t<=m&&!vis[t*2]){
vis[t*2]=1;
cnt[t*2]=cnt[t]+1;
q.push(t*2);
}
}
}
signed main(){
cin>>n>>m;
bfs();
return 0;
}