第9章 图论
图的基本概念
图的定义
无序积:\(A\delta B=\{(a,b)\mid a\in A,b\in B\}\),其中\(A,B\)为任意集合,\((a,b)\)称为无序对
图的基本定义\(G=<V,E>\)
- \(V\):结点集。\(V=\{v_{1},v_{2},...,v_{n}\}\)是有限非空集合,其中\(v_{i}\)称为结点,简称点
- \(E\):边集。\(E\)中的每个元素都有\(V\)中的结点对与之对应,称之为边
- 无向边:边对应的结点对无序,记作\(e=(u,v)\),其中\(u,v\)是边的两个端点
- 有向边:边对应的结点对有序,记作\(e=<u,v>\),其中\(u,v\)也是边的两个端点
- \(u\):\(e\)的始点(弧尾)
- \(v\):\(e\)的终点(弧头)
图的表示
使用邻接矩阵进行表示,行是出,列是入
邻接点与邻接边
邻接点:边\(e\)的端点\(u\)和\(v\)(当一个结点有环时,它才是自己的邻接点)。称\(u\)(或\(v\))和\(e\)互为关联
邻接边:具有公共端点的两条边(所有边都是自己的邻接边)。
环(自环/子回路):两个端点相同的边
孤立结点:图中不与任何结点相邻接的结点
零图:仅由孤立结点组成的图
平凡图:仅含一个结点的零图
(n,m)图:即含有n个结点,m条边的图
n阶图:含有n个结点的图
例:
图的分类
按有无方向分类:
- 无向图:每条边都是无向边的图称为无向图
- 有向图:每条边都是有向边的图
- 混合图:有些边是无向边,而另一些边是有向边的图
平行边:两结点之间(包括结点自身间)若有相同始点和相同终点的几条边,则这几条边称为平行边
边的重数:两结点\(a,b\)之间相互平行的边的条数称为边\((a,b)\)或\(<a,b>\)的重数
按有无平行边分类:
- 多重图:含有平行边的图
- 线图:即非多重图
- 简单图:无环的线图(这里的环指的是自环)
按边或结点是否含权分类:
- 无权图:没有边权和点权
- 赋权图:有边权或点权,\(G\)是一个三重组\(<V,E,g>\)或四重组\(<V,E,f,g>\)
- \(f\):从V到非负实数集合的函数,对应点权
- \(g\):从E到非负实数集合的函数,对应边权
赋权图例子:
\(\begin{array}{l}f(a)=9,f(b)=6,f(c)=7,f(d)=10;\\ g((a,b))=50,g((a,c))=70,g((a,d))=45,g((b,c))=40,g((c,d))=35.\end{array}\)
图的操作
设图\(G=<V,E>\)
- 删除边:
- 删除\(e\):用\(G-e\)表示从\(G\)中去掉边\(e\)所得到的图
- 删除\(E'\):用\(G-E'\)表示从\(G\)中去掉\(E'\)中所有边所得到的图
- 删除结点:
- 删除\(v\):用\(G-v\)表示从\(G\)中去掉结点\(v\)及\(v\)关联的所有边所得到的图
- 删除\(V'\):用\(G-V'\)表示从\(G\)中删除\(V'\)中所有结点及其关联的所有边所得到的图
- 边的收缩:设\(e=(u,v)\in E\),用\(G\setminus e\)表示从\(G\)中删除\(e\) ,将\(e\)的两个端点\(u,v\)用一个新的结点\(w\)代替,使\(w\)关联除\(e\)外的\(u\)和\(v\)关联的一切边
一个图\(G\)可以收缩为图\(H\),是指\(H\)可以从\(G\)经过若干次边的收缩而得到 - 加新边:设\(u,v\in V\)(\((u,v)\)可能相邻,也可能不相邻),用\(G\cup (u,v)\)表示在\(u,v\)之间加一条边\((u,v)\)
边的收缩例子:
\(G\):\(G\setminus (b,g)\):
子图与补图
子图
设有图\(G=<V,E>\)和图\(G_1=<V_1,E_1>\)
- 子图:若\(V_1\subseteq V,E_1\subseteq E\),则称\(G_1\)是\(G\)的子图,记为\(G_1\subseteq G\)
- 真子图:\(G_1\subseteq G,\;G_1\neq G\)(即\(V_1\subset V\)或\(E_1\subset E\)),则称\(G_1\)是\(G\)的真子图,记为\(G_1\subset G\)
- 生成子图:若\(V_1=V,E_1\subseteq E\)(即\(G_1=G-(E-E_1)\)),则称\(G_1\)是\(G\)的生成子图
- 导出子图:设\(V_2\subseteq V\)且\(V_2\neq \phi\)(即\(G_1=G-(V-V_2)\)),以\(V_2\)为结点集,以两个端点均在\(V_2\)中的边的全体为边集的\(G\)的子图,称为\(V_2\)的导出子图
每个图都是它自身的子图、生成子图、导出子图
完全图
设\(G=<V,E>\)为n个结点的无向简单图
- 无向完全图:\(G\)中任意两个结点之间都有边相连。简称\(G\)为完全图,记为\(K_n\),边数为\(\mathrm{C}_{n}^{2}=\frac{1}{2}n(n-1)\)
- 有向完全图:\(G\)中任意两个结点之间都有两条方向相反的有向边相连。也记为\(K_n\),边数为\(\mathrm{P}_n^2=n(n-1)\)
- 补图:若\(G'=<V,E'>\)为完全图,称\(G_1=<V,E'-E>\)为\(G\)的补图,记作\(\overline{G}\)
平凡图也是完全图
完全图的邻接矩阵除对角线上的元素为0外,其它元素均为1
\(K_n\)与n个结点的零图互为补图
关于补图的例题:
结点的度数与握手定理
设\(G=<V,E>\)
- 度数:\(G\)中以结点\(v\in V\)为端点的边数,称为结点\(v\)的度数,简称度,记为\(deg(v)\)
通俗来讲就是,有挨着的度数就+1,不管是出/入/无向/还是环的某一端
(即不管有无向只要有环就+2,无向图的边只+1,有向图的出边+1,入边+1) - 出度和入度:\(G\)是有向图,\(G\)中以结点\(v\)为始点的边数称为\(v\)的出度,记为\(deg^+(v)\),\(G\)中以结点\(v\)为终点的边数称为\(v\)的入度,记为\(deg^-(v)\),有\(\deg(v)=\deg^{+}(v)+\deg^{-}(v)\)
- 最大度和最小度:
- \(G\)的最大度:\(\Delta(G)=\max\{\deg(v) | v\in V\}\),简记为\(\Delta\)
- \(G\)的最小度:\(\delta (G)=\min\{\deg(v) | v\in V\}\),简记为\(\delta\)
- 最大出度/入度和最小出度/入度:在有向图\(G\)中
- \(G\)的最大出度:称\(\Delta^+ (G)=\max\{\deg^+(v) | v\in V\}\),简记为\(\Delta^+\)
- \(G\)的最小出度:称\(\delta^+ (G)=\min\{\deg^+(v) | v\in V\}\),简记为\(\delta^+\)
- \(G\)的最大入度:称\(\Delta^- (G)=\max\{\deg^-(v) | v\in V\}\),简记为\(\Delta^-\)
- \(G\)的最小入度:称\(\delta^- (G)=\min\{\deg^-(v) | v\in V\}\),简记为\(\delta^-\)
度数序列:设\(\mathbf{V}=\left\{v_1,v_2,\cdots,v_n\right\}\)为图\(G\)的结点集,称\((\deg(v_1),\deg(v_2),\cdots,\deg(v_n))\)为\(G\)的度数序列,对于有向图还可以分成出度序列和入度序列
握手定理
- 基本定理:设图\(G=<V,E>\),则有\(\sum\limits_{v\in V}\deg(v)=2|E|\)
若\(G\)是有向图,还有\(\sum\limits_{v\in V}\deg^+\left(\boldsymbol{v}\right)=\sum\limits_{v\in V}\deg^-\left(\boldsymbol{v}\right)=\left|\boldsymbol{E}\right|\) - 推论:奇度数结点的个数为偶数
- 扩展定理:非负整数组成的度数序列\(\mathbf{d}=\left(\mathbf{d}_{1},\mathbf{d}_{2},\cdots,\mathbf{d}_{n}\right)\)是可图化的当且仅当\(\sum_{i=1}^{n}d_{i}\)为偶数
- 充分性证明:依据握手定理
- 必要性证明:奇数度点两两之间连一边,剩余度用环来实现
图的同构
设两个图\(G=<V,E>\)和\(G'=<V',E'>\)
- 同构:若存在双射函数\(g:V\rightarrow V'\),使得对于任意的\(e=\left(\begin{matrix}v_{i},v_{j}\end{matrix}\right)\in E\)(或者\(e=<v_i,v_j>\in E\))当且仅当\(e'=(g(v_i),g(v_j))\in E'\)(或者\(e'=<g(v_i),g(v_j)>\in E'\)),并且\(e\)与\(e'\)的重数相同,则称\(G\)与\(G'\)同构,记为
- 同构的必要条件:
- 结点数目相同
- 边数相同
- 度数相同的结点数相同
判断同构大多只能凭经验去试
通路、回路、连通性
通路与回路
给定有向图或无向图\(G=<V,E>\),以及结点和边相继交错出现的序列\(\Gamma=v_{0}e_{1}v_{1}e_{2}v_{2}\cdots e_{k}v_{k}\)
- 通路:若\(\Gamma\)中边\(e_i\)的两个端点是\(v_{i-1}\)和\(v_i\)(\(G\)是有向图时要求\(v_{i-1}\)与\(v_i\)分别是\(e_i\)的始点和终点),\(i=1,2,...,k\),则称\(\Gamma\)为结点\(v_0\)到结点\(v_k\)的通路
- 通路的始点和终点:分别对应结点\(v_0\)和结点\(v_k\)
- 通路的长度:即边的数目\(k\)
- 回路:当且仅当\(v_0=v_k\)时
- 简单通路/一条迹:通路中所有的边互不相同
- 简单回路/一条闭迹:回路中所有的边互不相同
- 基本通路/初级通路/路径:通路中所有的结点互不相同
- 基本回路/初级回路/圈:回路中除\(v_0=v_k\)外的所有结点互不相同
注意:
回路是通路的特殊情况,但当说一基本通路时,一般是指它不是基本回路的情况
一条通路可以可以用\(v_{0}e_{1}v_{1}e_{2}v_{2}\cdots e_{n}v_{n}\)表示,也可以用\(e_1e_2\cdots e_n\)表示,线图中还可以表示为\(\upsilon_{0}\upsilon_{1}\upsilon_{2}\cdots\upsilon_{n}\)
利用矩阵乘法计算长度为m的通路数:
设\(G=<V,E>\)为线图,\(V=\{ v_1,v_2,\cdots,v_n\},A=(a_{ij})_{n\times n}\)为\(G\)的邻接矩阵,\({A}^{m}\)为矩阵\(A\)自乘\(m\)次,则
\(a_{ij}^{(m)}\)为从结点\(v_i\)到结点\(v_j\)长度为\(m\)的通路数目
\(a_{ii}^{(m)}\)为从结点\(v_i\)到自身的长度为\(m\)的环数目
\(\sum_{i=1}^{n}\sum_{j=1}^{n}a_{i j}^{(m)}\)为\(G\)中长度为\(m\)的通路(含回路)总数
设\(G=<V,E>\)中,\(v_i,v_j\in V\)
- 可达:若从\(v_i\)到\(v_j\)存在通路,则称\(v_i\)到\(v_j\)是可达的,此外任何结点到自己都是可达的
- 结点间的距离/短程线:\(v_i\)到\(v_j\)的最短通路的长度为\(v_i\)到\(v_j\)的距离,记为\(d(v_i,v_j)\),若\(v_i\)到\(v_j\)不可达,则\(d(v_i,v_j)=\infty\)
- \(d(v_i,v_j)\)的性质:
- \(d(v_i,v_j)\geq 0\)
- \(d(v_i,v_j)=0\)
- \(d(v_i,v_k)+d(v_k,v_j)\geq d(v_i,v_j)\)
- 无向图有\(d(v_i,v_j)=d(v_j,v_i)\),而有向图不一定有\(d(v_i,v_j)=d(v_j,v_i)\)
通路和回路长度的定理
- 通路:在一个具有\(n\)个结点的图中,如果从结点\(v_i\)到结点\(v_j(v_i\neq v_j)\)存在一条通路,则从\(v_i\)到\(v_j\)存在一条长度不大于\(n-1\)的基本通路
- 回路:在一个具有\(n\)个结点的图中,如果存在经过结点\(v_i\)的回路,则存在一条经过结点\(v_i\)的长度不大于\(n\)的基本回路
通过矩阵计算结点间距离:对于线图\(G\),\(A\)为\(G\)的邻接矩阵,\({A}^m\)为矩阵自乘\(m\)次,可以得到距离矩阵\(D=(d(v_i,v_j))_{n\times n}\),其中\(d(v_i,v_j)\)为\(v_i\)到\(v_j\)间的距离:
通过矩阵计算结点间的可达性:对于线图\(G\),基于上面的距离矩阵上进行判断,即可得到\(G\)的可达性矩阵\(\boldsymbol{P}=\left(\begin{matrix}{p}_{i j}\end{matrix}\right)_{n\times n}\):
简化计算的方法(不依赖距离矩阵)为:
无向图的连通性
\(G=<V,E>\)是无向图
- 连通图:若\(G\)中的任何两个结点都是可达的,则称\(G\)是连通图,否则称G是非连通图或分离图
- 可达性关系R:\(G\)中结点之间的可达关系R是\(V\)上的等价关系
- 连通分支:由可达关系的每个等价类导出的子图都称为\(G\)的一个连通分支,用\(p(G)\)表示\(G\)中的连通分支个数(\(G\)是连通图当且仅当\(p(G)=1\))
- 点割集:对于\(V'\subset V\),若\(p(G-V')>p(G)\)且对于\(V'\)的任何真子集\(V''\)均有\(p(G-V'')=p(G)\),则称\(V'\)为\(G\)的一个点割集,若点割集中只有一个结点\(v\),则称\(v\)为割点
- 边割集:对于\(E'\subset E\),若\(p(G-E')>p(G)\)且对于\(E'\)的任何真子集\(E''\)均有\(p(G-E'')=p(G)\),则称\(E'\)为\(G\)的一个边割集,若边割集中只有一条边\(e\),则称\(e\)为割边或桥(所有的悬挂边都是桥)
- 连通度:\(G\)是无向连通图,\(\kappa(G)=\min\{\mid V'\mid\;\;\mid\; V'为G的点割集\}\)为\(G\)的点连通度,简称连通度
- k-连通图:只要满足\(\kappa\left(G\right)\geq k\),即可称\(G\)为k-连通图(规定非连通图的连通度为0)
- 边连通度:\(G\)是无向连通图,\(\lambda(G)=\min\{\mid E'\mid\;\mid\; E'为G的边割集\}\)为\(G\)的边连通度,简称边连通度
- k边-连通图:只要满足\(\lambda\left(G\right)\geq k\),即可称\(G\)为k边-连通图(规定非连通图的边连通度为0)
- 连通度、边连通度、最小连通度的大小关系:\(\kappa(G)\leqslant\lambda(G)\leqslant\delta(G)\)
- 推论:对任意无向图\(G\),若\(G\)是k-连通图,则\(G\)必为k边-连通图
有向图的连通性
有向图结点之间的可达关系仅仅具有自反性和传递性
\(G=<V,E>\)是有向图
- 连通图/弱连通图略去\(G\)中所有有向边的方向得无向图\(G'\) ,如果无向图G\(是连通图,则称有向图\)G$是连通图或称为弱连通图,否则称G是非连通图
- 单向连通图:若\(G\)中任何一对结点之间至少有一个结点到另一个结点是可达的,则称\(G\)是单向连通图
- 充要条件:\(G\)中存在一条经过所有结点的通路
- 强连通图:若\(G\)中任何一对结点之间都是相互可达的,则称\(G\)是强连通图
- 充要条件:\(G\)中存在一条经过所有结点的回路
3种连通图的关系:
若有向图\(G\)是强连通图,则它必是单向连通图;若有向图G是单向连通图,则它必是(弱)连通图。但是上述二命题的逆均不成立
无向图中的极大基本通路
- 概念:对于无向图\(G\)中的一条基本通路\(\Gamma\),若\(\Gamma\)的始点和终点都不与\(\Gamma\)外的结点相邻,则称\(\Gamma\)是一条极大基本通路
- 构造方法:扩大基本通路法,常与最小度\(\delta\)一起给出通路与回路的构造性证明
任给一条基本通路,如果它的始点或终点与该基本通路外的某个结点相邻,就把它延伸到这个结点﹒继续这一过程,直到最后不能向外延伸为止,最后总能得到一条极大基本通路
对于有向图,可以同样定义极大基本通路的概念和用扩大基本通路法构造图中的一条极大基本通路
扩大基本通路法例题1:
设\(G\)为n(\(n\geq 3\))阶无向简单图,\(\delta(G)\geq 2\),证明\(G\)中存在长度\(\geq \delta(G)\)的路径
解:令\(T=\phi\),里面的元素视作已标记的元素,再令\(k=\delta(G)\)
任取一点记为\(v_0\),并令\(T=T+\{v_0\}\),因为\(deg(v_0)\geq k\),即至少有\(k\)个未标记的邻接点
任取\(v_0\)的一个未标记邻接点记为\(v_1\),并令\(T=T+\{v_1\}\),同样有\(deg(v_1)\geq k\),即至少有\(k-1\)个未标记的邻接点(-1是因为\(v_1\)可能与\(v_0\)相连)
任取\(v_1\)的一个未标记邻接点记为\(v_2\),并令\(T=T+\{v_2\}\),同样有\(deg(v_2)\geq k\),即至少有\(k-2\)个未标记的邻接点(-2是因为\(v_2\)可能与\(v_0\)和\(v_1\)相连)
如此重复...
到\(v_{k-1}\)时,\(v_{k-1}\)至少有\(k-(k-1)=1\)个未标记的邻接点,取其中一个未标记邻接点\(v_k\),此时已有\(v_0v_1v_2...v_k\)为一个长度为\(k=\delta(G)\)的路径
继续对\(v_k\)分析,若\(v_k\)有未标记的邻接点则取其中一个记为\(v_{k+1}\),并令\(T=T+\{v_k\}\)
继续对\(v_{k+1}\)分析,若\(v_{k+1}\)有未标记的邻接点则取其中一个记为\(v_{k+2}\),并令\(T=T+\{v_{k+1}\}\)
重复分析...
最后\(v_{k+t}\;(t\geq 0)\)的邻接点均已标记,此时已经形成路径\(v_0v_1v_2...v_k...v_{k+t}\)
故最终可以得到一个长度\(\geq k=\delta(G)\)的路径
扩大基本通路法例题2:
设\(G\)为n(\(n\geq 3\))阶无向简单图,\(\delta(G)\geq 2\),证明\(G\)中存在长度\(\geq \delta(G)+1\)的基本回路
解:先由第1题的结论得到一条长度为\(\geq \delta(G)\)的路径\(v_0v_1v_2...v_k...v_{k+t}\;(t\geq 0)\)
由于\(deg(v_{k+t})\geq k\),所以\(v_{k+t}\)必与\(v_i\;(0\leq i\leq t)\)相邻接,从而形成一条长度\(\geq \delta(G)\)的基本回路\(v_iv_{i+1}...v_{k+t}\;(t\geq 0且0\leq i\leq t)\)
有向图的连通分支:
- 定义:在有向图\(G=<V,E>\)中,设\(G'\)是\(G\)的子图,若\(G'\)是强连通的(单向连通的、弱连通的),对于\(\forall G''\subseteq G\),若\(G'\subseteq G''\),则\(G''\)不是强连通的(单向连通的、弱连通的),那么称\(G'\)为\(G\)的强连通分支(单向连通分支、弱连通分支),或称为强分图(单向分图、弱分图)
- 性质特点:
- 每一个结点位于且仅位于一个强(弱)连通分支中
- 每一个结点至少位于一个单向连通分支中
- 每一条边至多在一个强连通分支中;至少在一个单向连通分支中;在且仅在一个弱连通分支中
计算图的连通分支,特别是有向图的单向分图,没有什么好的方法,只有凭经验按定义去试
无向赋权图的最短通路
Dijkstra算法核心:不断选新点,每选一个新点就标记该点,然后更新当前路径长度,更新起点到其它新点的最短距离。可参考 https://zhuanlan.zhihu.com/p/338414118
Floyd算法核心:对着邻接矩阵遍历结点,把每个结点(对应每一行)依次当做中转点,再依次更新其它结点(其它各行)使用该中转点后的最短距离。可参考 https://zhuanlan.zhihu.com/p/339542626