Algorithm 找到方法,还是其他算法?
我需要使用什么算法来实现这样的功能?我曾试图研究最长路径查找算法,但它们不适合这里。但是我不想放弃,我需要寻找哪条路?。也许有人知道,或者以前遇到过这样的问题?谢谢回复 一种可能性是a,它可以通过递归实现。在解决迷宫问题时,它看起来像下面这样Algorithm 找到方法,还是其他算法?,algorithm,Algorithm,我需要使用什么算法来实现这样的功能?我曾试图研究最长路径查找算法,但它们不适合这里。但是我不想放弃,我需要寻找哪条路?。也许有人知道,或者以前遇到过这样的问题?谢谢回复 一种可能性是a,它可以通过递归实现。在解决迷宫问题时,它看起来像下面这样 创建一个二维位数组(布尔值),表示某个特定空间是否已经被访问过,是否可以全局访问 编写一个递归函数,该函数以行和列为参数,以及以前访问过的节点列表。此功能应在以下情况下终止 当前行和列已被访问 当前行或列超出范围 我们已经达到了目标。(从图纸上看不清楚您
行
和列
为参数,以及以前访问过的节点列表。此功能应在以下情况下终止
- 当前行和列已被访问
- 当前行或列超出范围
- 我们已经达到了目标。(从图纸上看不清楚您是想走出迷宫还是想到达迷宫中的其他点)。在这种情况下,终止并输出当前路径(以前访问的节点列表)
行、列
对标记为已访问,然后根据其相对于墙的位置进行最多四次递归调用
特别是,它应该对任何不需要跨越墙的邻居进行递归调用
每个递归调用的参数都是新的行
和列
,以及传递它的列表的修改版本。更具体地说,它将自己的行和列附加到列表的末尾,并通过值传递修改后的列表。一种可能性是a,它可以通过递归实现。在解决迷宫问题时,它看起来像下面这样
行
和列
为参数,以及以前访问过的节点列表。此功能应在以下情况下终止
- 当前行和列已被访问
- 当前行或列超出范围
- 我们已经达到了目标。(从图纸上看不清楚您是想走出迷宫还是想到达迷宫中的其他点)。在这种情况下,终止并输出当前路径(以前访问的节点列表)
行、列
对标记为已访问,然后根据其相对于墙的位置进行最多四次递归调用
特别是,它应该对任何不需要跨越墙的邻居进行递归调用
每个递归调用的参数都是新的
行
和列
,以及传递它的列表的修改版本。更具体地说,它会将自己的行和列附加到列表的末尾,并通过值传递修改后的列表
BFS是一种算法,在给定一个非加权图的情况下,查找从源节点到所有节点(或到第一个目标节点)的路径。
BFS保证是完整的(如果存在,总是找到一条路径)和最优的(总是找到最短的路径) 在您的示例中,图形是迷宫的矩阵(每个单元都是一个节点),边
(u,v)
表示您可以从单元u
移动到单元v
BFS相当容易实现
另一种选择是使用更复杂的方法。A*通常比具有正确启发式函数的BFS更快。在您的案例中,您可以使用启发式。一个简单而经典的“迷宫求解器”是 BFS是一种算法,在给定一个非加权图的情况下,查找从源节点到所有节点(或到第一个目标节点)的路径。
BFS保证是完整的(如果存在,总是找到一条路径)和最优的(总是找到最短的路径) 在您的示例中,图形是迷宫的矩阵(每个单元都是一个节点),边
(u,v)
表示您可以从单元u
移动到单元v
BFS相当容易实现
另一种选择是使用更复杂的方法。A*通常比具有正确启发式函数的BFS更快。在您的情况下,您可以使用启发式。我相信您建议的是深度优先搜索。非递归的替代方法是广度优先搜索。宽度优先在出口位于起点附近的情况下具有优势。在出口与起点相邻的简单情况下,广度优先将立即找到解决方案,而深度优先搜索可能会花费数小时穿越死胡同,然后再返回检查相邻的正方形。@user3386109,谢谢您的提示。是的,这是DFS,尽管我认为我自己从未连接过它,因为我一直认为DFS和BFS是在图上的,我对网格的第一个概念不是图,但你绝对正确。@user3386109,我已经更新了答案。我相信你建议的是深度优先搜索。非递归的替代方法是广度优先搜索。宽度优先在出口位于起点附近的情况下具有优势。在出口与起点相邻的简单情况下,广度优先将立即找到解决方案,而深度优先搜索可能会花费数小时穿越死胡同,然后再返回检查相邻的正方形。@user3386109,谢谢您的提示。是的,这是DFS,虽然我认为我自己从未连接过它,因为我总是认为DFS和BFS是在图上的,我的第一个co