跳转到内容

图遍历

来自维基教科书,开放的书籍,面向开放的世界

试卷 1 - ⇑ 算法基础 ⇑

图遍历 树遍历 →



广度优先遍历

[编辑 | 编辑源代码]
广度优先搜索

广度优先搜索是一种算法,它通过探索距离出发节点越来越远的节点来访问图中的顶点。您可以把它想象成从出发节点向外辐射的波浪。

BFS 的一个典型应用是在无权图中查找最短路径。

  1. 将源节点或构成起点集的节点入队。
  2. 出队一个节点并检查它。
    • 如果在这个节点中找到目标元素,则退出搜索并返回结果。
    • 否则,将尚未发现的任何后继节点(直接子节点)入队。
  3. 如果队列为空,则已检查可达子图中的所有节点 - 退出搜索并返回“未找到”。
  4. 如果队列不为空,则从步骤 2 重复。

深度优先遍历

[编辑 | 编辑源代码]
深度优先搜索

使用堆栈而不是队列将把该算法变成深度优先搜索。DFS 尽可能向下遍历分支,在遇到死胡同时回溯。

DFS 的一个典型应用是导航迷宫。

上述方法是非递归的,因此为了进行 **后序** 遍历(这是一个重要的变体),而不是在将所有子节点插入堆栈后处理当前顶点,而是将其插入第二个堆栈。然后从第二个堆栈中弹出顶点并按该顺序对它们进行操作。

如果图和父子关系表示依赖关系,例如各个工种的施工时间表、相关学习单元的课程,那么清空第二个堆栈创建的顺序会创建一个可行的计划。

华夏公益教科书