Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 找到方法,还是其他算法?_Algorithm - Fatal编程技术网

Algorithm 找到方法,还是其他算法?

Algorithm 找到方法,还是其他算法?,algorithm,Algorithm,我需要使用什么算法来实现这样的功能?我曾试图研究最长路径查找算法,但它们不适合这里。但是我不想放弃,我需要寻找哪条路?。也许有人知道,或者以前遇到过这样的问题?谢谢回复 一种可能性是a,它可以通过递归实现。在解决迷宫问题时,它看起来像下面这样 创建一个二维位数组(布尔值),表示某个特定空间是否已经被访问过,是否可以全局访问 编写一个递归函数,该函数以行和列为参数,以及以前访问过的节点列表。此功能应在以下情况下终止 当前行和列已被访问 当前行或列超出范围 我们已经达到了目标。(从图纸上看不清楚您

我需要使用什么算法来实现这样的功能?我曾试图研究最长路径查找算法,但它们不适合这里。但是我不想放弃,我需要寻找哪条路?。也许有人知道,或者以前遇到过这样的问题?谢谢回复

一种可能性是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