这题运行没输出答案
不知道为什么??
悬赏一个关注
以下是题目(代码在最后)
地上有一排格子,共 n 个位置。机器猫站在第一个格子上,需要取第 n 个格子里的东西。
机器猫当然不愿意自己跑过去,所以机器猫从口袋里掏出了一个机器人!这个机器人的行动遵循下面的规则:
问机器人最少需要多少次跳跃,才能到达 n 号格子。
仅一行,一个正整数,表示 n。
仅一行,一个正整数,表示最少跳跃次数。
30
6
50
7
64
6
63
8
第一组样例:
1→2→4→8→16→15→30
第二组样例:
1→2→3→6→12→24→25→50
第三组样例:
1→2→4→8→16→32→64
第四组样例:
1→2→4→8→16→32→31→62→63
请注意在本组样例中,63 不能通过 64−1 得到,因为格子总数为 63,没有第 64 个格子。
对于 100% 的数据,有 1≤n≤1000000。
代码:
#include<bits/stdc++.h>
using namespace std;
int n;
bool b[1000010];
int fx[3]= {-1,1,2};
struct node {
int v,step;
};
void bfs(int m) {
queue<node>q;
node x;
x.v=1;
x.step=0;
b[1]=true;
q.push(x);
while(!q.empty()) {
x=q.front();
q.pop();
for(int i=0; i<3; i++) {
node tt;
if(x.step == m) {
cout<<x.step+1;
return;
} else {
if(fx[i]==2) {
tt.step=x.step+1;
tt.v=x.v*2;
if(tt.v<=m&&tt.v>0&&b[tt.v]==0){
b[tt.v]=1;
q.push(tt);
}
} else {
tt.step=x.step+1;
tt.v=x.v+fx[i];
if(tt.v<=m&&tt.v>0&&b[tt.v]==0){
b[tt.v]=1;
q.push(tt);
}
}
}
}
}
return;
}
int main() {
cin>>n;
bfs(n);
return 0;
}