【正经题解】最少问题
2024-03-15 11:20:06
发布于:浙江
12阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
int start_num, target_num, visited[100005];
struct Node {
int value, steps;
};
// 广度优先搜索
void bfs() {
queue<Node> q;
q.push({start_num, 0});
visited[start_num] = 1;
while (!q.empty()) {
Node cur = q.front();
q.pop();
// 判断是否达到目标值
if (cur.value == target_num) {
cout << cur.steps;
return;
}
// 尝试减1
if (cur.value - 1 >= 0 && !visited[cur.value - 1]) {
visited[cur.value - 1] = 1;
q.push({cur.value - 1, cur.steps + 1});
}
// 尝试加1
if (cur.value + 1 <= 100000 && !visited[cur.value + 1]) {
visited[cur.value + 1] = 1;
q.push({cur.value + 1, cur.steps + 1});
}
// 尝试乘2
if (cur.value * 2 <= 100000 && !visited[cur.value * 2]) {
visited[cur.value * 2] = 1;
q.push({cur.value * 2, cur.steps + 1});
}
}
}
int main() {
cin >> start_num >> target_num;
bfs();
return 0;
}
这里空空如也
有帮助,赞一个