图的遍历,所谓遍历,即是对结点的访问。一个图有那么多个结点,如何遍历这些结点,需要特定策略,一般有两种访问策略:
-
深度优先遍历
-
广度优先遍历
深度优先遍历
深度优先遍历(Depth First Search)的主要思想是:
- 首先以一个未被访问过的顶点作为起始顶点,沿当前顶点的边走到未访问过的顶点;
- 当没有未访问过的顶点时,则回到上一个顶点,继续试探别的顶点,直至所有的顶点都被访问过。
在此可以用一句话来形容 “不到南墙不回头”。
无向图的深度优先遍历图解
以下"无向图"为例:
对上无向图进行深度优先遍历,从A开始:
-
第1步:访问A。
-
第2步:访问B(A的邻接点)。 在第1步访问A之后,接下来应该访问的是A的邻接点,即"B,D,F"中的一个。但在本文的实现中,顶点ABCDEFGH是按照顺序存储,B在"D和F"的前面,因此,先访问B。
-
第3步:访问G(B的邻接点)。 和B相连只有"G"(A已经访问过了)
-
第4步:访问E(G的邻接点)。 在第3步访问了B的邻接点G之后,接下来应该访问G的邻接点,即"E和H"中一个(B已经被访问过,就不算在内)。而由于E在H之前,先访问E。
-
第5步:访问C(E的邻接点)。 和E相连只有"C"(G已经访问过了)。
-
第6步:访问D(C的邻接点)。
-
第7步:访问H。因为D没有未被访问的邻接点;因此,一直回溯到访问G的另一个邻接点H。
-
第8步:访问(H的邻接点)F。
因此访问顺序是:A -> B -> G -> E -> C -> D -> H -> F
有向图的深度优先遍历图解
对上有向图进行深度优先遍历,从A开始:
-
第1步:访问A。
-
第2步:访问(A的出度对应的字母)B。 在第1步访问A之后,接下来应该访问的是A的出度对应字母,即"B,C,F"中的一个。但在本文的实现中,顶点ABCDEFGH是按照顺序存储,B在"C和F"的前面,因此,先访问B。
-
第3步:访问(B的出度对应的字母)F。 B的出度对应字母只有F。
-
第4步:访问H(F的出度对应的字母)。 F的出度对应字母只有H。
-
第5步:访问(H的出度对应的字母)G。H的出度对应字母只有G。
-
第6步:访问(G的出度对应字母)C。 在第5步访问G之后,接下来应该访问的是G的出度对应字母,即"B,C,E"中的一个。但在本文的实现中,顶点B已经访问了,由于C在E前面,所以先访问C。
-
第7步:访问(C的出度对应的字母)D。访问C之后,接下来应该访问的是C的出度对应字母,即"B,D"中的一个。但在本文的实现中,顶点B已经访问了,所以访问D。
-
第8步:访问E。D无出度,所以一直回溯到G对应的另一个出度E。
因此访问顺序是:A -> B -> F -> H -> G -> C -> D -> E
广度优先遍历
广度优先遍历(Depth First Search)的主要思想是:类似于树的层序遍历。
无向图的广度优先遍历图解
从A开始,有4个邻接点,“B,C,D,F”,这是第二层;
在分别从B,C,D,F开始找他们的邻接点,为第三层。以此类推。
因此访问顺序是:A -> B -> C -> D -> F -> G -> E -> H
有向图的广度优先遍历图解
与无向图类似 。可以参考。
因此访问顺序是:A -> B -> C -> F -> D -> H -> G -> E
习题
- 下列哪一种图的邻接矩阵是对称矩阵()。
A.有向网
B.无向网
C.AOV网
D.AOE网
正确答案:B
答案解析:
无向图是没有方向的,所以它的邻接矩阵是对称的。无向图的邻接矩阵存储中,每条表存储两次,且A[i][j]A[j][i]。
扩展资料:
AOV网(baiActivity On Vertex Network)是指在一个表示工程的有向图中,用顶点表示活动,用弧表示活动之间的优先关系,这样的有向图为顶点表示活动的网。AOV网中的弧表示活动之间的某种约束关系。AOV网中不存在回路(即无环的有向图)。
AOE网(Activity On Edge Network)是指在一个表示工程的带权有向图中,用顶点表示事件,用弧表示活动,用弧上的权值表示活动持续的时间,这种有向图的弧表示活动的网。AOE网中没有入度的顶点称为始点或源点,没有出度的顶点叫做终点或汇点。
AOV网和AOE网虽然都是用来对工程建模的,但它们还是有很大的区别,主要体现在AOV网是顶点表示活动的网,它只描述了活动之间的约束关系,而AOE网是用有向边表示活动,边上的权值表示活动持续的时间。
AOE网是建立在AOV网基础之上(活动之间约束关系没有矛盾),再来分析完成整个工程至少需要多少时间,或者为缩短完成工程所需时间,应当加快那些活动等问题。
- 要连通具有 n 个顶点的有向图,最少需要()条边。
A. n+l
B. n-l
C. 2n
D. n
正确答案:D
答案解析:
有向图的话,连通=所有节点成环,不然怎么走的通。
- 连通n个结点的有向图,至少需要n条边。
- 连通n个结点的无向图,至少需要n-1条边。
如有不同见解,欢迎留言讨论~~