#include<iostream>
#include<queue>
using namespace std;
int n,A,B;
struct node{
int v;
int deep;
}Node;
bool inq[5010] ={false};
int ans = 0;
void BFS(int A){
queue<node> q;
Node.v = A;
Node.deep = 0;
q.push(Node);
while(!q.empty()){
node top = q.front();
q.pop();
if(top.v ==B){
ans = top.deep;
break;
}
if(top.v+1<=n&&inq[top.v+1] ==false){
Node.v = top.v +1;
Node.deep = top.deep +1;
q.push(Node);
inq[top.v+1] = true;
}
if(top.v-1>=0&&inq[top.v-1] ==false){
Node.v = top.v - 1;
Node.deep = top.deep +1;
q.push(Node);
inq[top.v-1] = true;
}
if(top.v*2<=n&&inq[top.v*2] ==false){
Node.v = top.v*2;
Node.deep = top.deep +1;
q.push(Node);
inq[top.v*2] = true;
}
}
}
int main(){
cin>>n>>A>>B;
inq[A] = true;
BFS(A);
cout<<ans<<'\n';
return 0;
}
計蒜客 一維座標的移動 BFS
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.