思想:
bfs广搜:while循环(队列有元素){每次都对于队首的坐标尝试+1,-1,x2的操作(用for循环)。注意:如果位置已经大于目标,停止+1并x2,因为这样做已经没有用了。然后,把队首删除。把操作后得到的坐标放入队尾。if判断:如果已经到达目的地就输出并返回。}
代码:
#include<bits/stdc++.h>
using namespace std;
int n,k,b[1000005];
bool a[1000005];
queue<int> q;
int w[3]={1,-1,2};
void bfs(int s){
q.push(s);
while(!q.empty()){
int x=q.front();
// cout<<"x:"<<x<<endl;
q.pop();
for(int i=0;i<3;i++){
int n=w[i]+x;
if(w[i]==2) n=2*x;
// cout<<"n:"<<n<<endl;
if(a[n]==0&&n>=0&&n<=2*k){
q.push(n);
a[n]=1;
b[n]=b[x]+1;
// cout<<"b[n]:"<<b[n]<<endl;
if(n==k){
cout<<b[n];
return;
}
}
}
}
}
int main(){
cin>>n>>k;
bfs(n);
return 0;
}