图遍历
出现
广度优先搜索是一种算法,它通过探索距离出发节点越来越远的节点来访问图中的顶点。您可以把它想象成从出发节点向外辐射的波浪。
BFS 的一个典型应用是在无权图中查找最短路径。
- 将源节点或构成起点集的节点入队。
- 出队一个节点并检查它。
- 如果在这个节点中找到目标元素,则退出搜索并返回结果。
- 否则,将尚未发现的任何后继节点(直接子节点)入队。
- 如果队列为空,则已检查可达子图中的所有节点 - 退出搜索并返回“未找到”。
- 如果队列不为空,则从步骤 2 重复。
使用堆栈而不是队列将把该算法变成深度优先搜索。DFS 尽可能向下遍历分支,在遇到死胡同时回溯。
DFS 的一个典型应用是导航迷宫。
上述方法是非递归的,因此为了进行 **后序** 遍历(这是一个重要的变体),而不是在将所有子节点插入堆栈后处理当前顶点,而是将其插入第二个堆栈。然后从第二个堆栈中弹出顶点并按该顺序对它们进行操作。
如果图和父子关系表示依赖关系,例如各个工种的施工时间表、相关学习单元的课程,那么清空第二个堆栈创建的顺序会创建一个可行的计划。