我有一个上学项目。
我必须从文件中读取一个迷宫,该迷宫由墙壁的'X'字符和可行走的单元格的'*'组成。迷宫入口位于左上方,出口位于右下方。 我已经实现了广度优先搜索,这非常慢,并且深度优先搜索更好。
我听说如果我使用A *和一个好的启发式,我可以更快地解决迷宫问题。我试图实现它,但我不确定我做得对。到目前为止我的算法的伪代码:
let s be a stack;
for all nodes
node.heuristic = INT_MAX;
headnode.heuristic = 0;
push head_node in stack;
While (stack != empty)
{
current_node = pop_stack(s);
if (current_node == goal_node)
return (SUCCESS);
for each node adjacent to current_node
node.heuristic = Manhattan distance from goal node
push edges in stack, starting by higher heuristic value;
}
我用这种方式计算曼哈顿距离启发式: md = abs(goal.x - node.x)+ abs(goal.y - node.y)。
正如您所看到的,除了启发式部分之外,我的A *基本上与迭代DFS相同。 我应该提一下,这个算法是在合理的时间内找到出路,但比我的DFS略慢。 如果有人能在这里帮助我,那就太棒了,因为我真的很难实现比我的DFS更好的A *。