11.23数据结构----图的遍历/连通性

来源:互联网 发布:同一网络的打印机安装 编辑:程序博客网 时间:2024/04/24 07:41

今天小结一下图的遍历:

图的遍历(TraveringGraph):从图的某一顶点出发,访遍图中的其余顶点,且每个顶点仅被访问一次。图的遍历算法是各种图的操作的基础。

先说一下它的复杂性:图的任意顶点可能和其余的顶点相邻接,可能在访问了某个顶点后,沿某条路径搜索后又回到原顶点。

再到解决办法了:在遍历过程中记下已被访问过的顶点。设置一个辅助向量Visited[1…n](n为顶点数),其初值为0,一旦访问了顶点vi后,使Visited[i]为1或为访问的次序号。

 图的遍历算法有深度优先搜索算法和广度优先搜索算法。采用的数据结构是(正)邻接链表。

下面我说一下图遍历的两点方法吧

第一点:深度优先搜索算法


深度优先搜索(DepthFirst Search--DFS)遍历类似树的先序遍历,是树的先序遍历的推广。

 算法思想;设初始状态时图中的所有顶点未被访问,则:

⑴ :从图中某个顶点vi出发,访问vi;然后找到vi的一个邻接顶点vi1 ;

⑵:从vi1出发,深度优先搜索访问和vi1相邻接且未被访问的所有顶点;

⑶:转⑴ ,直到和vi相邻接的所有顶点都被访问为止

⑷ :继续选取图中未被访问顶点vj作为起始顶点,转(1),直到图中所有顶点都被访问为止。


第二点:广度优先搜索算法


广度优先搜索(BreadthFirst Search--BFS)遍历类似树的按层次遍历的过程。

1 算法思想

 设初始状态时图中的所有顶点未被访问,则:

⑴ :从图中某个顶点vi出发,访问vi;

⑵:访问vi的所有相邻接且未被访问的所有顶点vi1,vi2,…,vim;

⑶:以vi1,vi2,…,vim的次序,以vij(1≦j≦m)依此作为vi ,转⑴; 

⑷ :继续选取图中未被访问顶点vk作为起始顶点,转⑴,直到图中所有顶点都被访问为止。

     很显然用广度优先搜索算法遍历图与深度优先搜索算法遍历图的唯一区别是邻接点搜索次序不同,因此,广度优先搜索算法遍历图的总时间复杂度为O(n+e) 。

    图的遍历可以系统地访问图中的每个顶点,因此,图的遍历算法是图的最基本、最重要的算法,许多有关图的操作都是在图的遍历基础之上加以变化来实现的。


第三点: 图的连通性问题

1 无向图的连通分量和生成树;对于无向图,对其进行遍历时:

(1)若是连通图:仅需从图中任一顶点出发,就能访问图中的所有顶点;图下图(一)

(2)若是非连通图:需从图中多个顶点出发。每次从一个新顶点出发所访问的顶点集序列恰好是各个连通分量的顶点集;

(一)


原创粉丝点击