农夫知道一头牛的位置,想要抓住它,农夫起始位于点N(0<=N<=100000),牛起始位于点K(0<=K<=100000),农夫有两种移动方法
1.从X移动到X−1或X+1,每次花费一分钟;
2.移动到2∗X,每次花费一分钟;
假设牛不知道农夫找它,农夫最少花费几分钟?
X和N
最短距离
输入
5 17
输出
4
2.我的代码为什么戳了?输出为0(玄关)
#include<bits/stdc++.h>
using namespace std;
int n,k,sum=0,vis[100010];
struct node{
int x,step;
}q[100010];
void bfs(int x,int y){
int head=1,tail=1;
q[tail].x=x;
q[tail].step=0;
tail++;
vis[x]=1;
while(head<tail){
int x1=q[head].x;
int step1=q[head].step;
if(x1==x){
cout<<step1;
return;
}
for(int i=1;i<=3;i++){
int xx;
if(i==1) xx=x1+1;
if(i==2) xx=x1-1;
if(i==3) xx=2*x1;
if(xx>=0&&xx<100000&&!vis[xx]){
q[tail].x=xx;
q[tail].step=step1+1;
tail++;
vis[xx]=1;
}
}
head++;
}
}
int main(){
cin>>n>>k;
bfs(n,k);
return 0;
}