由于图的任意顶点都可能与其他顶点相邻接,所以可以设一个辅助数组 visited[]
来标记顶点是否被访问过
类似树的层序遍历
要点:
visited[]
)FirstNeighbor(G, x)
: 求图G中第一个邻接点,若有则返回顶点号,若x没有邻接点或图中不存在x,则返回-1NextNeighbor(G, x, y)
: 假设图G中顶点y是顶点x的一个邻接点,返回除y之外顶点x的下一个邻接点的顶点好,若y是x的最后一个邻接点,则返回-1连通图可以一次BFS完成遍历
如果是非连通图可以通过BFSTraverse
循环调用BFS
同一个图的邻接矩阵表示方式唯一,因此广度优先遍历序列唯一
同一个图的邻接表表示方式不唯一,因此广度优先遍历序列不唯一
空间复杂度:最坏情况,辅助队列大小为 O(|V|)
时间复杂度
广度优先生成树由广度优先遍历过程确定。由于邻接表表示方式不唯一,因此基于邻接表的广度优先生成树也不唯一
对非连通图的广度优先遍历,可以得到广度优先生成森林
类似树的先根遍历
要点:
visited[]
)空间复杂度:
时间复杂度:
同一个图的邻接矩阵表示方式唯一,因此深度优先遍历序列唯一
同一个图的邻接表表示方式不唯一,因此深度优先遍历序列不唯一
当各边当权值相等时,广度优先算法可以解决单源最短路径问题
同一个图的邻接矩阵表示方式唯一,因此深度优先生成树也唯一
同一个图的邻接表表示方式不唯一,因此深度优先生成树不唯一
深度优先生成森林同广度优先生成森林
利用图的遍历算法来判断图的连通性