题意: 把一个数,通过两种变化变成另一个数。
题解: bfs一下,就行了,注意超界。x*2>maxn 退出。
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e4+100;
int v[maxn*2];
int n,m;
struct node{
int x,step;
}u,e,st,ed;
int judge(int x){
if(x<1||x>maxn) return 0;
if(v[x]) return 0;
return 1;
}
int bfs(){
st.step=0;
v[st.x]=1;
queue<node>que;
que.push(st);
while(!que.empty()){
u=que.front();
que.pop();
e.step=u.step+1;
e.x=u.x-1;
if(judge(e.x)){
v[e.x]=1;if(e.x==ed.x) return e.step;
que.push(e);
}
e.x=u.x*2;
if(judge(e.x)){
v[e.x]=1;if(e.x==ed.x) return e.step;
que.push(e);
}
}
return 0;
}
int main(){
scanf("%d %d",&n,&m);
if(n==m) {printf("0\n");return 0;}
st.x=n,ed.x=m;
int ans=bfs();
printf("%d\n",ans);
return 0;
}