Section-1 Traverse 第1节 遍历

Section-1 Traverse

第1节 遍历

图(Graph)

G=<V,E>G = <V,E>是由顶点集合VV和边集合EE组成的数据结构。一个边连接两个顶点,若两顶点uuvv为一条边的两个端点,则称uuvv相邻。

GG的子图的所有顶点和边都属于图GG

完全图(Complete Graph)的所有顶点两两相邻。如下图所示:

有向图(Directed Graph)/无向图(Undirected Graph)

无向边ee的两端点是uuvv,表示既可以从uu到达vv,也可以从vv到达uu。有向边eeuu指向vv,表示只能从uu到达vv,而不能反向。一条无向边也可以看作两条方向相反,端点相同的有向边的组合。

所有边都是无向边的图为无向图(Undirected Graph),所有边都是有向边的图为有向图(Directed Graph)。

度数(Degree)/出度(Out Degree)/入度(In Degree)

节点uu的出度(Out Degree)是从节点uu出发的边的数量,也称为出度度数,从节点uu出发的边称为出弧边。无向图的顶点uu的所有边都可以看作出弧边,即节点的边数等于出度。

节点uu的入度(In Degree)是到达(指向)节点uu的边的数量,也称为入度度数,到达节点uu的边称为入弧边。无向图的顶点uu的所有边都可以看作入弧边,即节点的边数等于入度。无向图中每个节点的出度和入度相等。

节点uu所关联的边数,称作该节点的度数(Degree)。无向图中节点viv_i的度数等于边的数量,等于出度度数,等于入度度数。有向图中任意节点viv_i的度数等于出度度数与入度度数之和。如下图所示:

上面两个图,图AA为有向图,节点[0,5][0,5]的出度分别为[2,2,1,1,2,1][2, 2, 1, 1, 2, 1],入度分别为[1,1,2,2,0,2][1, 1, 2, 2, 0, 2]。图BB为无向图,节点[0,5][0,5]的出度分别为[3,4,3,3,2,3][3, 4, 3, 3, 2, 3],入度与出度一样。

一般用n×nn \times n的矩阵表示一个拥有nn个节点的图GG,节点范围为[0,n1][0,n-1]G[i,j]G[i,j]表示从节点iijj的距离(i,j[0,n1]i,j \in [0,n-1]),或节点ii是否可以直接到达节点jj,等等信息。注意节点ii到自己的距离为00,不能到达自己。上图中AABB可以表示为矩阵:

A=[010001001100000001001000100100010000]B=[010011101101010101011010100100111000]A = \begin{bmatrix} 0 & 1 & 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 1 & 0 & 0 & 0 \\ 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 \end{bmatrix} \quad B = \begin{bmatrix} 0 & 1 & 0 & 0 & 1 & 1 \\ 1 & 0 & 1 & 1 & 0 & 1 \\ 0 & 1 & 0 & 1 & 0 & 1 \\ 0 & 1 & 1 & 0 & 1 & 0 \\ 1 & 0 & 0 & 1 & 0 & 0 \\ 1 & 1 & 1 & 0 & 0 & 0 \end{bmatrix}

环(Cycle)

若图GG中对于顶点viv_i,存在一条路径从它出发可以到达自己,则称该路径为一个环。不存在环的图称为无环图,存在环的图称为有环图。完全图都是有环图。

拓扑排序(Topological Sort)

拓扑排序(Topological Sort)是有向无环图中所有顶点按照依赖进行的排序。

设完成任务jj需要先完成任务ii,则任务jj依赖任务ii。用有向图表示这一组任务的完成过程这样存在依赖关系的nn个任务,即存在边ei,je_{i,j}从顶点viv_i指向vjv_j,最终得到一个有向无环图。如下图所示:

路径(Path)/回路(Cycle)

GG的路径(Path)是一组边的有序集合,表示随着时间依次经过的边的顺序。回路(Cycle)是起点和终点相同的路径。

欧拉路径(Eulerian Path)/欧拉回路(Eulerian Cycle)

欧拉路径(Eulerian Path)经过图GG中每条边一次且仅一次(同一个顶点可以经过多次),遍历所有边。

判断欧拉路径:

(1)(1) 判断有向图是否存在欧拉路径:有向图DGDG中存在一个起始顶点v0v_0满足出度比入度大1(out1=in1+1out_{1} = in_{1} + 1),存在一个终止顶点v1v_1满足入度比出度大1(in2=out2+1in_{2} = out_{2} + 1),其余所有顶点的入度等于出度,则该有向图DGDG中存在欧拉路经;

(2)(2) 判断无向图是否存在欧拉路径:无向图UGUG中存在两个顶点v0v_0v1v_1满足度数为奇数,其余节点的度数都是偶数,则该无向图UGUG中存在欧拉路经;

欧拉回路(Eulerian Cycle)是既是欧拉路径又是回路的路径。

判断欧拉回路:

(1)(1) 判断有向图是否存在欧拉回路:有向图DGDG的任意顶点viv_i满足ini=outiin_{i} = out_{i},出度等于入度,则该有向图DGDG中存在欧拉回路;

(2)(2) 判断无向图是否存在欧拉回路:无向图UGUG的任意顶点viv_i满足度数为偶数,则该无向图DGDG中存在欧拉回路;

拥有欧拉回路的图GG称为欧拉图(Eulerian Graph)。

汉密尔顿路径(Hamilton Path)/哈密尔顿回路(Hamilton Cycle)

汉密尔顿路径(Hamilton Path)经过图GG中每个顶点一次且仅一次(同一条边可以经过多次),遍历所有顶点。求解汉密尔顿路径是一个NP完全问题。

哈密尔顿回路(Hamilton Cycle)是既是哈密尔顿路径又是回路的路径。

拥有汉密尔顿回路的图GG称为汉密尔顿图。完全图必然是汉密尔顿图。

Introduction To Algorithms

图论术语

Last updated