无向图的深度优先搜索(DFS)序列需通过递归或栈实现,关键在于标记已访问节点,避免重复遍历,序列不唯一但每个连通分量需遍历完整。
- 初始化准备:明确图的结构(邻接表或邻接矩阵),创建空集合
visited
记录已访问节点,初始化结果列表sequence
存储序列。 - 递归实现:从起始节点开始,先标记当前节点为已访问并加入序列,再依次递归访问其未被访问的相邻节点;递归终止条件为当前节点未被访问且无相邻节点。
- 栈实现:使用显式栈模拟递归,将起始节点压栈并标记访问,循环中弹出栈顶节点加入序列,按逆序或顺序压入其未访问相邻节点,确保深度优先。
- 连通分量处理:若图不连通,需在主循环中对所有未访问节点执行DFS,确保覆盖所有连通部分。
- 细节优化:邻接矩阵的访问需遍历所有节点,效率低于邻接表;栈实现中节点压入顺序会影响输出序列,但算法逻辑不变。
DFS序列正确性依赖于标记机制和遍历完整性,掌握两种实现方式后可灵活选择;实际应用中根据图规模和场景调整,避免因访问顺序导致性能差异。