这道题其实也就是奇怪的电梯的哥哥版本,也就多加了一步注意一下即可
AC:
#include <bits/stdc++.h>
using namespace std;
int n,k;
const int N = 1e5+5;
bool vis[N];
struct node{
int x,step;
};
void bfs(){
node now,pos,next;
queue<node>q;
now.x=n,now.step=0;
q.push(now);
while(!q.empty()){
pos = q.front();
q.pop();
if(pos.x == k){
cout << pos.step;
}
if(pos.x-1 >= 0 && vis[pos.x-1] == 0){
next.x = pos.x-1;
vis[pos.x-1]=1;
next.step=pos.step+1;
q.push(next);
}
if(pos.x+1 <= 100000 && vis[pos.x+1] == 0){
next.x = pos.x+1;
vis[pos.x+1]=1;
next.step=pos.step+1;
q.push(next);
}
if(pos.x*2 <= 100000 && vis[pos.x*2] == 0){
next.x = pos.x*2;
vis[pos.x*2]=1;
next.step=pos.step+1;
q.push(next);
}
}
}
int main(){
cin >> n >> k;
vis[n]=1;
bfs();
return 0;
}