数据结构与算法:图的遍历—深度优先搜索( 二 )


 

数据结构与算法:图的遍历—深度优先搜索

文章插图
 
第八步 , 当前顶点是 F , 与 F 相连并且还未被访问到的点是 C 和 D , 按照字母顺序来 , 下一个被访问的 点是 C , 将 C 压入栈 , 标记为访问过 , 输出到结果中 。
 
数据结构与算法:图的遍历—深度优先搜索

文章插图
 
第九步 , 当前顶点为 C , 与 C 相连并尚未被访问到的顶点是 H , 将 H 压入栈 , 标记为访问过 , 输出到结 果中 。
 
数据结构与算法:图的遍历—深度优先搜索

文章插图
 
第十步 , 当前顶点是 H , 由于和它相连的点都被访问过了 , 将它弹出栈 。
 
数据结构与算法:图的遍历—深度优先搜索

文章插图
 
第十一步 , 当前顶点是 C , 与 C 相连的点都被访问过了 , 将 C 弹出栈 。
 
数据结构与算法:图的遍历—深度优先搜索

文章插图
 
第十二步 , 当前顶点是 F , 与 F 相连的并且尚未访问的点是 D , 将 D 压入栈 , 输出到结果中 , 并标记为访问过 。
 
数据结构与算法:图的遍历—深度优先搜索

文章插图
 
第十三步 , 当前顶点是 D , 与它相连的点都被访问过了 , 将它弹出栈 。以此类推 , 顶点 F , B , A 的邻居 都被访问过了 , 将它们依次弹出栈就好了 。最后 , 当栈里已经没有顶点需要处理了 , 我们的整个遍历结束 。
 
数据结构与算法:图的遍历—深度优先搜索

文章插图
 
三、时间复杂度邻接表 访问所有顶点的时间为 O(V) , 而查找所有顶点的邻居一共需要 O(E) 的时间 , 所以总的时间复杂度是 O(V + E) 。
邻接矩阵 查找每个顶点的邻居需要 O(V) 的时间 , 所以查找整个矩阵的时候需要 O( V * V) 的时间 。

【数据结构与算法:图的遍历—深度优先搜索】


推荐阅读