我需要使用什么算法来实现这样的功能?我曾试图寻找最长的寻找算法的方法,但它们并不适用于此。但我不想放弃,我需要寻找哪种方式?也许有人知道,或者之前遇到过这样的问题?谢谢你的回复!
答案 0 :(得分:2)
一种可能性是depth first search,可以通过递归来实现。关于迷宫解决问题,它看起来像下面这样。
编写一个以row
和column
为参数的递归函数,以及以前访问过的节点列表。此功能应在以下条件下终止。
如果函数没有终止,那么它应该将当前row,column
对标记为已访问,然后根据其相对于墙的位置进行最多四次递归调用。
特别是,它应该对任何不需要越过墙的邻居进行递归调用。
每个递归调用的参数是新的row
和column
,以及它传递的列表的修改版本。更具体地说,它会将自己的行和列附加到列表的末尾,并将此修改后的列表按值传递。
答案 1 :(得分:2)
一个简单而经典的迷宫求解器'是BFS。
BFS是一种给出非加权图的算法,从源到所有节点(或第一个目标节点)找到shortest path。
保证BFS完整(如果存在,则始终找到路径)和最佳(始终找到最短路径)。
在您的示例中,图表是迷宫的矩阵(每个单元格是一个节点),边缘(u,v)
表示您可以从单元格u
移动到单元格v
。< / p>
BFS相当容易实现。
另一种方法是使用更复杂的A* Search Algorithm。具有正确的启发式功能,A *通常比BFS快。在您的情况下,您可以使用manhattan distances启发式方法。