找方式还是其他算法?

时间:2014-04-18 08:38:07

标签: algorithm

我需要使用什么算法来实现这样的功能?我曾试图寻找最长的寻找算法的方法,但它们并不适用于此。但我不想放弃,我需要寻找哪种方式?也许有人知道,或者之前遇到过这样的问题?谢谢你的回复!

sample

2 个答案:

答案 0 :(得分:2)

一种可能性是depth first search,可以通过递归来实现。关于迷宫解决问题,它看起来像下面这样。

  1. 创建一个2D数组位(布尔值),表示是否已访问过特定空间,可全局访问。
  2. 编写一个以rowcolumn为参数的递归函数,以及以前访问过的节点列表。此功能应在以下条件下终止。

    • 当前行和列已被访问过。
    • 当前行或列超出范围。
    • 我们达到了目标。 (从图中不清楚你是否想要走出迷宫或者到达迷宫中的其他一点)。在这种情况下,终止并输出当前路径(先前访问过的节点列表)。
  3. 如果函数没有终止,那么它应该将当前row,column对标记为已访问,然后根据其相对于墙的位置进行最多四次递归调用。

    特别是,它应该对任何不需要越过墙的邻居进行递归调用。

    每个递归调用的参数是新的rowcolumn,以及它传递的列表的修改版本。更具体地说,它会将自己的行和列附加到列表的末尾,并将此修改后的列表按值传递。

答案 1 :(得分:2)

一个简单而经典的迷宫求解器'是BFS

BFS是一种给出非加权图的算法,从源到所有节点(或第一个目标节点)找到shortest path
保证BFS完整(如果存在,则始终找到路径)和最佳(始终找到最短路径)。

在您的示例中,图表是迷宫的矩阵(每个单元格是一个节点),边缘(u,v)表示您可以从单元格u移动到单元格v。< / p>

BFS相当容易实现。

另一种方法是使用更复杂的A* Search Algorithm。具有正确的启发式功能,A *通常比BFS快。在您的情况下,您可以使用manhattan distances启发式方法。