题解
2024-10-21 12:44:56
发布于:浙江
5阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int n,k,vis[100005],step[100005];//输入的n和k,vis表示是否访问过,step表示步数
int main(){
cin >> n >> k;
queue<int> q;//定义队列
q.push(n);//加入起点
vis[n] = 1;//标记起点已经走过
while(q.size()){//while循环直到队列为空
int r = q.front();
q.pop();//获取队首后删除
if(r == k){
cout << step[r];
break;
}//如果搜索到终点,输出步数,结束循环
if(r + 1 <= 100000 && !vis[r + 1]){//注意要先写判断范围,不然数组越界直接就RE了,下同
q.push(r + 1);//队列加入,下同
step[r + 1] = step[r] + 1;//计算步数,下同
vis[r + 1] = 1;//标记走过,下同
}//往前走一步
if(r - 1 >= 1 && !vis[r - 1]){
q.push(r - 1);
step[r - 1] = step[r] + 1;
vis[r - 1] = 1;
}//往后走一步
if(r * 2 <= 100000 && !vis[r * 2]){
q.push(r * 2);
step[r * 2] = step[r] + 1;
vis[r * 2] = 1;
}//乘二
}
//不写return 0好习惯
}
全部评论 4
顶
2024-10-21 来自 浙江
0顶
2024-10-21 来自 浙江
0顶
2024-10-21 来自 浙江
0顶
2024-10-21 来自 浙江
0
有帮助,赞一个