广搜深搜都可以
用广搜
#include <cstdio>//poj oj不能用万能头文件
#include<string>
#include<queue>
using namespace std;
bool p[100000 + 10];
struct R{
int w, g;
R (int w, int g) :w(w), g(g){}
};
int n, k;
int dfs()
{
queue<R> q;
q.push(R(n,0));
p[n] = 1;
while (!q.empty()){
R t = q.front(); q.pop();
int f = t.w, g = t.g;
if (f == k) return g;
if (f - 1 >= 0 && !p[f - 1]) {
q.push(R(f - 1, g + 1));
p[f-1] = 1; //一定先做标记 不然一定超时
}
if (f + 1 <= 100000 && !p[f + 1]){
q.push(R(f + 1, g + 1));
p[f+1] = 1;
}
if (f * 2 <= 100000 && !p[f * 2]) {
q.push(R(f * 2, g + 1));
p[f*2] = 1;
}
}
}
int main()
{
memset(p, 0, sizeof(p));
scanf("%d %d", &n, &k);
printf("%d\n", dfs());
return 0;
}
本文介绍了一种使用广度优先搜索(BFS)算法解决迷宫寻找路径问题的方法。通过定义状态转移规则并利用队列数据结构进行节点的扩展与遍历,实现了从初始状态到目标状态的有效搜索。代码中详细展示了如何对每个可能的状态进行探索,并通过标记已访问状态避免重复计算。
311

被折叠的 条评论
为什么被折叠?



