AC代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int MAXN = 100000;
struct node{
int pos,t;
bool operator < (const node &a)const{
return t > a.t;
}
};
int n,k;
int vis[MAXN+5];
int timee = 1;
void bfs(){
memset(vis,0,sizeof(vis));
node cur;
cur.pos = n,cur.t = 0;
vis[n] = 1;
priority_queue<node> q;
q.push(cur);
while(!q.empty()){
cur = q.top();
q.pop();
if(cur.pos == k){
cout<<cur.t<<endl;
return ;
}
int pos;
for(int i = 0; i < 3; i++){
if(i == 0)
pos = cur.pos-1;
else if(i == 1)
pos = cur.pos+1;
else if(i == 2)
pos = cur.pos*2;
if(pos >= 0 && pos <= MAXN && !vis[pos]){//注意边界
vis[pos] = 1;
q.push(node{pos,cur.t+1});
}
}
}
}
int main(){
while(~scanf("%d%d",&n,&k)){
bfs();
}
return 0;
}