一、图的基本概念
1、图
定义:一个图(Graph)是一个序偶⟨V,E⟩,记为G=⟨V,E⟩,其中:
(1)V={v1,v2,⋯vn}是有限非空集合,vi称为结点(Nodal Point),简称点(Point),V称为结点集(Nodal Set)。
(2)E是有限集合,称为边集(Frontier Set)。E中的每个元素都有V中的结点对与之对应,称之为边(Edge)。
与关系类似,图也有集合表示,图形表示,邻接矩阵三种表示方法。
一些名词:在图G=⟨V,E⟩中,
(1)若两个结点vi和vj是边e的端点,则称vi与vj互为邻接点(Adjacent Point),否则vi与vj不邻接
(2)具有公共结点的两条边称为邻接边(Adjacent Edge)
(3)两个端点相同的边称为环(Ring)或自回路(Self-Loop)
(4)图中不与任何结点相邻接的结点称为孤立结点(Isolated Point)
(5)仅由孤立结点组成的图称为零图(Null Graph)
(6)仅含一个结点的零图称为平凡图(Trivial Graph)
(7)含有n个结点,m条边的图,称为(n,m)图
(8)在有向图中,两结点间(包括结点自身间)若有同始点和同终点的几条边,则这几条边称为平行边(Parallel Edge);在无向图中,两结点间(包括结点自身间)若有几条边,则这几条边称为平行边。
(9)两结点a、b间相互平行的边的条数称为边(a,b)或⟨a,b⟩的重数。
2、图的操作
| 操作 |
符号表示 |
具体操作 |
| 删除边 |
G−e=⟨V,E−{e}⟩ |
直接从图中去掉边e |
| 删除边集 |
G−E′=⟨V,E−E′⟩ |
|
| 删除结点 |
G−v=⟨V−{v},E−{e∣v关联e}⟩ |
去掉结点v及其关联的所有边 |
| 删除结点子集 |
G−V′=⟨V−V′,E−{e∣v∈V′∧v关联e}⟩ |
|
| 边的收缩 |
G∖e |
去掉边e,再将两端点变为一个新结点w |
| 加新边 |
G∪(u,v) |
在u和v之间增加一条边 |
3、图的分类
(1)按边有无方向分类:
每条边都是无向边的图称为无向图(Undirected Graph);每条边都是有向边的图称为有向图(Directed Graph);有些边是无向边,而另一些边是有向边的图称为混合图(Mixed Graph)。环既可以看成有向边,也可以看成无向边。
(2)按有无平行边分类:
含有平行边的图称为多重图;非多重图称为线图;无环的线图称为简单图。
(3)按边或结点是否含权分类:
赋权图(Weight Graph)G是一个三重组⟨V,E,g⟩或四重组⟨V,E,f,g⟩,其中V是结点集合,E是边的集合,f是从V到非负实数集合的函数,g是从E到非负实数集合的函数。非赋权图称为无权图。
4、子图与补图
子图:
设有图G=⟨V,E⟩和图G1=⟨V1,E1⟩。
(1)若V1⊆V,E1⊆E,则称G1是G的子图,记为G1⊆G;
(2)若G1⊆G,且G1=G(即V1⊂V或E1⊂E),则称G1是G的真子图,记为G1⊂G;
(3)若V1=V,E1⊆E,则称G1是G的生成子图;
(4)设V2⊆V且V2=∅,以V2为结点集,以两个端点均在V2中的边的全体为边集的G的子图,称为V2导出的G的子图,简称V2的导出子图。
注意:生成子图与G有相同的结点集,导出子图可以由G删除结点子集得到。每个图都是它自己的生成子图,导出子图和子图。
题型:子图类型的判断
完全图与补图:设G=⟨V,E⟩为一个具有n个结点的无向简单图,如果G中任意两个结点间都有边相连,则称G为无向完全图(Undirected Complete Graph),简称G为完全图(Complete Graph),记为Kn。
设G=⟨V,E⟩为一个具有n个结点的有向简单图,如果G中任意两个结点间都有两条方向相反的有向边相连,则称G为有向完全图(Directed Complete Graph),在不发生误解的情况下,也记为Kn。
设G=⟨V,E⟩为简单图,G′=⟨V,E1⟩为完全图,则称G1=⟨V,E1−E⟩为G的补图,记为GC。
注意:对于完全图来说,其邻接矩阵除主对角元为0外,其它元素均为1;计算补图时,先将原图补全为完全图,再删去原图的所有边;完全图的补图是n个结点的零图。
题型:补图的计算
二、握手定理
度数:
(1)图G=⟨V,E⟩中以结点v∈V为端点的边数(有环时计算两次)称为结点v的度数(Degree),简称度,记为deg(v)。
(2)有向图G=⟨V,E⟩中以结点v为始点的边数称为v的出度(Out-Degree),记为deg+(v);以结点v为终点的边数称为v的入度(In-Degree),记为deg−(v)。显然,deg(v)=deg+(v)+deg−(v)。
(3)对于图G=⟨V,E⟩,度数为1的结点称为悬挂结点(Hanging Point),以悬挂结点为端点的边称为悬挂边(Hanging Edge)。
利用邻接矩阵计算度数:
(1)若G是无向图,则A中第i行元素是由结点vi为端点的边所决定,其中为1的元素数目等于vi的度数,即deg(vi)=aii+∑k=1naik或deg(vi)=aii+∑k=1naki。
(2)若G是有向图,则A中第i行元素是由结点vi为始点的边所决定,其中为1的元素数目等于vi的出度,即deg+(vi)=∑k=1naik;A中第i列元素是由vi为终点的边决定,其中为1的元素数目等于vi的入度,即deg−(vi)=∑k=1naki。
题型:结点度数的计算
握手定理:图中结点度数的总和等于边数的二倍,即设图G=⟨V,E⟩,则有∑v∈Vdeg(v)=2∣E∣。
推论:图中度数为奇数的结点个数为偶数。
定理:有向图中各结点的出度之和等于各结点的入度之和,等于边数,即设有向图G=⟨V,E⟩,则有∑v∈Vdeg+(v)=∑v∈Vdeg−(v)=∣E∣。
度数序列:设V={v1,v2,v3,⋯vn}为图G的结点集,称(deg(v1),deg(v2),⋯,deg(vn))为G的度数序列(Degree Sequence)。
三、图的同构
同构:设两个图G=⟨V,E⟩和G′=⟨V′,E′⟩,如果存在双射函数g:V→V’,使得对于任意的e=(vi,vj)(或者⟨vi,vj⟩)∈E当且仅当e′=(g(vi),g(vj))(或者⟨g(vi),g(vj)⟩)∈E’,并且e与e’的重数相同,则称G与G’同构(Isomor- phism),记为G≅G′。
图同构的必要条件:
(1)结点数目相同;
(2)边数相同;
(3)度数相同的结点数相同。
图不同构的充分条件:
(1)结点数目不同;
(2)边数不同;
(3)度数相同的结点数不同。
注意:证明图同构,只需给出一种满足的双射函数即可;证明图不同构,首先考虑必要条件是否满足,均满足时可采用反证法。
题型:图同构的判断与证明
四、通路与回路
1、概念
定义:给定图G=⟨V,E⟩中结点和边相继交错出现的序列Γ=v0e1v1e2v2⋯ekvk。
(1)若Γ中边ei的两端点是vi−1和vi(G是有向图时要求vi−1与vi分别是ei的始点和终点),i=1,2,⋯,k,则称Γ为结点v0到结点vk的通路(Entry)。v0和vk分别称为此通路的始点和终点,统称为通路的端点。 通路中边的数目k称为此通路的长度。当v0=vn时,此通路称为回路(Circuit)。
类型:若通路中的所有边互不相同,则称此通路为简单通路(Simple Entry)或一条迹;若回路中的所有边互不相同,则称此回路为简单回路(Simple Circuit)或一条闭迹。若通路中的所有结点互不相同(从而所有边互不相同),则称此通路为基本通路(Basic Entry)或者初级通路、路径;若回路中除v0=vk外的所有结点互不相同(从而所有边互不相同),则称此回路为基本回路(Basic Circuit)或者初级回路、圈。
注意:回路也是一种通路;基本通路(回路)一定是简单通路(回路),但反之不真。
题型:通路类型的判断
2、计算
通路数目的计算定理:设G=⟨V,E⟩为线图,V={v1,v2,v3,⋯vn},A=(aij)n×n为G的邻接矩阵,
Am=(aij(m))n×n=m次⎝⎜⎜⎜⎜⎛a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann⎠⎟⎟⎟⎟⎞⋅⎝⎜⎜⎜⎜⎛a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann⎠⎟⎟⎟⎟⎞⋅⋯⋅⎝⎜⎜⎜⎜⎛a11a21⋮an1a12a22⋮an2⋯⋯⋱⋯a1na2n⋮ann⎠⎟⎟⎟⎟⎞
则:aij(m)为从结点vi到vj的长度为m的通路数目;aii(m)为从结点vi到自身的长度为m的回路数目;∑i=1n∑j=1naij(m)为G中长度为m的通路(含回路)总数。
题型:通路数目的计算
3、可达与距离
定义:在图G=⟨V,E⟩中,vi,vj∈V。
(1)如果vi到vj存在通路,则称vi到vj是可达的,否则称vi到vj不可达。规定:任何结点到自己都是可达的。
(2)如果vi到vj可达,则称长度最短的通路为vi到vj的短程线(Geodesic);vi到vj的短程线的长度称为vi到vj的距离(Distance),记为d(vi,vj)。如果vi到vj不可达,则通常记为d(vi,vj)=∞。
显然,d(vi, vj)满足下列性质:
d(vi,vj)≥0;
d(vi,vi)=0;
d(vi,vk)+d(vk,vj)≥d(vi,vj);
对于无向图,一定有若vi到vj可达,则vj到vi可达;也有d(vi,vj)=d(vj,vi);
对于有向图,若vi到vj可达,vj到vi不一定可达;也不一定有d(vi,vj)=d(vj,vi)。
定理:在一个具有n个结点的图中,如果从结点vi到结点vj(vi=vj)存在一条通路,则从vi到vj存在一条长度不大于n−1的通路。
推论:在一个具有n个结点的图中,如果从结点vi到结点vj(vi=vj)存在一条通路,则从vi到vj存在一条长度不大于n−1的基本通路。
定理:在一个具有n个结点的图中,如果存在经过结点vi的回路,则存在一条经过vi的长度不大于n的回路。
推论:在一个具有n个结点的图中,如果存在经过结点vi的回路,则存在一条经过vi的长度不大于n的基本回路。
可达的判断与距离的计算:设矩阵Bm=I+A+A2+A3+⋯+Am(I为n阶单位阵),则Bm中的元素bij(m)表示图G中结点vi到vj的长度小于等于m的通路总数,若i=j,bii(m)为G中结点vi到自身的长度小于等于m的回路总数。
定理:设G=⟨V,E⟩为线图,V={v1,v2,v3,⋯vn},若bij(n−1)>0,那么从vi到vj可达,否则不可达;并且
d(vi,vj)={∞k,,(aij(1)=0∧aij(2)=0∧⋯∧aij(n−1)=0)∨(bij(n−1)=0)k=min{m∣aij(m)=0,m=1,2⋯,n−1}.(i=j)
可达性矩阵:设G=⟨V,E⟩是一个线图,其中V={v1,v2,v3,⋯vn},并假定结点已经有了从v1到vn的次序,称n阶方阵P=(pij)n×n为图G的可达性矩阵(Accessibility Matrix),其中pij={1,0,vi到vj可达否则.(i,j=1,2,⋯,n);P=I∨A∨A(2)∨A(3)∨⋯∨A(n−1)。A(i)表示A的布尔积i次幂。
题型:可达的判断与距离的计算
4、无向赋权图的最短通路
Dijkstra算法:在赋权图中,边的权也称为边的长度,一条通路的长度指的就是这条通路上各边的长度之和。从结点vi到vj的长度最小的通路,称为vi到vj的最短通路。算法的基本思路如下:
(1)初始化:将v1置为P标号,d(v1)=0,P={v1},对于∀vi∈V,i=1,置vi为T标号,即T=V-P且d(vi)={w(v1,vi),∞,(v1,vi)∈E(v1,vi)∈/E.
(2)找最小:寻找具有最小值的T标号的结点。若为vk,则将vk的T标号改为P标号,且P=P∪{vk},T=T−{vk}。
(3)检查修改:修改与vk相邻的结点的T标号值。∀vi∈V,如果d(vk)+w(vk,vi)<d(vi),则将d(vi)修改为d(vk)+w(vk,vi)。
(4)重复:循环进行(2)(3)步骤,直到所求vn∈P,此时d(vn)即为通路的最小值。


|
第一次 |
第二次 |
第三次 |
第四次 |
第六次 |
第七次 |
| v2 |
1(1→2) |
P |
P |
P |
P |
P |
| v3 |
4(1→3) |
3(1→2→3) |
P |
P |
P |
P |
| v4 |
∞ |
8(1→2→4) |
8(1→2→4) |
7(1→2→3→5→4) |
P |
P |
| v5 |
∞ |
6(1→2→5) |
4(1→2→3→5) |
P |
P |
P |
| v6 |
∞ |
∞ |
∞ |
10(1→2→3→5→6) |
9(1→2→3→5→4→6) |
P |
题型:利用Dijkstra算法求两点间最短通路
Floyd算法:从矩阵D(0)=(wij)n×n(这里wij=w(vi,vj),称为图的长度矩阵)开始,依次构造出n个矩阵D(1),D(2),⋯,D(n),这里n为图中结点的个数。第k个矩阵D(k)=(dij(k))n×n的元素dij(k)表示从结点vi到vj而中间结点仅属于v1到vk的k个结点的所有通路中的最短通路长度。若已知D(k−1)=(dij(k−1))n×n,则D(k)=(dij(k))n×n的元素规定为$$d_{ij}^{(k)}=min { d_{ij}{(k-1)},d_{ik}{(k-1)}+d_{kj}^{(k-1)} } $$运算过程从k=1开始,让i和j分别取遍从1到n的所有值,然后k增加1,如此反复进行,直到k=n为止。这时D(n)=(dij(n))n×n的元素dij(n)就是从vi到vj的最短通路长度。

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛012∞∞∞161412010∞∞7∞∞100356∞∞∞304∞∞∞∞540281676∞20914∞∞∞890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛012∞∞∞161412010∞∞726∞100356∞∞∞304∞∞∞∞540281676∞2091426∞∞890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛01222∞∞161412010∞∞7262210035636∞∞304∞∞∞∞540281676∞209142636∞890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛0122225271614120101315726221003563625133049392715540281676920914263639890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛0122225271614120101315726221003563625133049392715540281676920914263639890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛0122225271614120101315723221003561325133046122715540281676620914231312890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛01222221816141201013971622100356132213304612189540281676620914161312890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞

⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛01222221816141201013971622100356132213304612189540281676620914161312890⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞
题型:求简单无向赋权图中的所有最短通路
五、图的连通性
连通图与非连通图:若无向图G中的任何两个结点都是可达的,则称G是连通图(Connected Graph),否则称G是非连通图(Unconnected Graph)或分离图(Separated Graph)。无向完全图Kn(n≥1)都是连通图,而多于一个结点的零图都是非连通图。利用邻接矩阵A和可达性矩阵P,显然有:非平凡无向线图G是连通图当且仅当它的可达性矩阵P的所有元素均为1。
可达等价定理:无向图G=⟨V,E⟩中结点之间的可达关系R定义如下:R={⟨u,v⟩∣u,v∈V,u到v可达},则R是V上的等价关系。
注意:由于有向图中边都有方向性,因此有向图结点之间的可达关系仅仅具有自反性和传递性,而不具有对称性。因此,有向图中可达关系不是等价关系。
连通分支:无向图G=⟨V,E⟩中结点之间的可达关系R的每个等价类导出的子图都称为G的一个连通分支(Connected Component)。用p(G)表示G中的连通分支个数。无向图G是连通图当且仅当p(G)=1;每个结点和每条边都在且仅在一个连通分支中。
定义:设G=⟨V,E⟩是一个有向图,
(1)略去G中所有有向边的方向得无向图G’,如果无向图G’是连通图,则称有向图G是连通图或称为弱连通图。否则称G是非连通图;
(2)若G中任何一对结点之间至少有一个结点到另一个结点是可达的,则称G是单向连通图;
(3)若G中任何一对结点之间都是相互可达的,则称G是强连通图。

注意:强连通图一定是单向连通图;单向连通图一定是(弱)连通图。
强连通图的充要条件:有向图G是强连通图的充分必要条件是:G中存在一条经过所有结点的回路。
单向连通图的充要条件:有向图G是单向连通图的充分必要条件是:G中存在一条经过所有结点的通路。
题型:有向图连通性的判断
有向图连通性的判断方法:
(1)能够找到一条经过所有结点的回路(可以经过重复的边或结点),则是强连通图。
(2)能够找到一条经过所有结点的通路(可以经过重复的边或结点),则是单向连通图。
(3)将有向边看作无向边的无向图是连通图,则是弱连通图;否则是非连通图。
(4)利用邻接矩阵A和可达性矩阵P来判断有向图的连通性,适用于计算机处理。(具体来说,有向线图G是强连通图当且仅当它的可达性矩阵P的所有元素均为1;有向线图G是单向连通图当且仅当它的可达性矩阵P及其转置矩阵PT经过布尔并运算后所得的矩阵P’=P∨PT中除主对角元外其余元素均为1;有向线图G是弱连通图当且仅当它的邻接矩阵A及其转置矩阵AT经布尔并运算所得的矩阵A’=A∨AT作为邻接矩阵而求得的可达性矩阵P’中所有元素均为1。)
连通分支:在有向图G=⟨V,E⟩中,设G’是G的子图,如果
(1)G’是强连通的(单向连通的、弱连通的);
(2)对任意G′′⊆G,若G’⊂G′′,则G′′不是强连通的(单向连通的、弱连通的);
那么称G’为G的强连通分支(单向连通分支、弱连通分支)(Strongly/Unilaterally/Weakly Connected Component),或称为强分图(单向分图、弱分图)。
注意:
(1)如果不考虑边的方向,弱连通分支对应相应的无向图的连通分支。
(2)注意把握强(单向、弱)连通分支的极大性特点,即任意增加一个结点就不是强(单向、弱)连通的了。
(3)与无向图的连通性类似,强(弱)连通分支确定的关系也是等价关系,但由于单向连通分支确定的关系不具有传递性,只是一个相容关系。
题型:有向图中连通分支的计算
有向图中连通分支的计算方法:
(1)从某个结点开始逐渐增加结点,使得这些结点导出的子图是强(单向或弱)连通的,直到不能增加结点为止。
(2)强(弱)连通分支相对简单,因为每个结点在且仅在一个强(弱)连通分支中;而单向连通分支的计算比较难,因为某些结点可能在多个单向连通分支中。
定理:在有向图G=⟨V,E⟩中,它的每一个结点位于且仅位于一个强(弱)连通分支中。
在有向图G=⟨V,E⟩中,它的每一个结点至少位于一个单向连通分支中。
在有向图G=⟨V,E⟩中,它的每一条边至多在一个强连通分支中;至少在一个单向连通分支中;在且仅在一个弱连通分支中。
六、习题
1、邻接矩阵的几大应用
(1)利用邻接矩阵求度数:对于无向图,vi点的度数等于邻接矩阵第i行所有元素的和,再加上aii。对于有向图,vi的出度等于第i行所有元素的和,入度等于第i列所有元素的和。
(2)利用邻接矩阵求长度为m的通路数量:先计算邻接矩阵A的m次幂,aij(m)为从结点vi到vj的长度为m的通路数目;aii(m)为从结点vi到自身的长度为m的回路数目。
(3)利用邻接矩阵求可达性矩阵:P=I∨A∨A(2)∨A(3)∨⋯∨A(n−1)。A(i)表示A的布尔积i次幂。
(4)利用邻接矩阵判断有向图的连通性。
2、同构与不同构的证明
证明图同构,只需给出一种满足的双射函数即可;证明图不同构,首先考虑必要条件是否满足,均满足时可采用反证法。
3、生成子图与导出子图的判断与计算
生成子图可以由原图删除边集得到,导出子图可以由原图删除点集得到。