为迷宫解决

时间:2016-05-20 10:47:50

标签: algorithm graph path-finding a-star heuristics

我有一个上学项目。

我必须从文件中读取一个迷宫,该迷宫由墙壁的'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 *。

0 个答案:

没有答案