本文属于「离散数学」系列文章之一。这一系列着重于离散数学的学习和应用。由于内容随时可能发生更新变动,欢迎关注和收藏离散数学系列文章汇总目录一文以作备忘。此外,在本系列学习文章中,为了透彻理解数学知识,本人参考了诸多博客、教程、文档、书籍等资料。以下是本文的不完全参考目录,在后续学习中还会逐渐补充:
- (国外经典教材)离散数学及其应用 第八版
Discrete Mathematics and Its Applications Eighth Edition
,作者是Kenneth H.Rosen
,袁崇义译,机械工业出版社- 离散数学 第二版,武波等编著,西安电子科技大学出版社,2006年
- 离散数学 第三版,方世昌等编著,西安电子科技大学出版社,2013年
- (经典参考书及其题解)离散数学/离散数学——理论•分析•题解,左孝凌、李为鉴、刘永才编著,上海科学技术文献出版社
- 离散数学习题集:数理逻辑与集合论分册,耿素云;图论分册,耿素云;抽象代数分册, 张立昂。北京大学出版社
文章目录
7.3 图的矩阵表示
采用矩阵表示图,便于计算机存储和处理图的信息(只对小图、稠密图有点用),也便于运用代数的方法研究图的性质(这才是重点!),例如,我们可以通过矩阵计算结果,判定图的连通性/可达性等问题。
7.3.1 邻接矩阵
定义7.3.1 设 G = ⟨ V , E ⟩ G= \langle V, E\rangle G=⟨V,E⟩ 是一个线图,结点集合 V = { v 1 , v 2 , … , v n } V = \{ v_1, v_2, \dots, v_n\} V={
v1,v2,…,vn} ,令 A ( G ) = [ a i j ] n × n A(G) = [a_{ij}]_{n\times n} A(G)=[aij]n×n ,其中:
a i j = { 1 若 [ v i , v j ] ∈ E 0 若 [ v i , v j ] ∉ E a_{ij} = \begin{cases} 1 \quad &若[v_i,\ v_j] \in E\\ 0\quad &若[v_i,\ v_j] \notin E \end{cases} aij={
10若[vi, vj]∈E若[vi, vj]∈/E 则称 A ( G ) A(G) A(G) 为 G G G 的邻接矩阵 adjacency matrix
。
【例1】设 G 1 G_1 G1 是有向图、 G 2 G_2 G2 是无向图,分别如图7.3.1(a)和(b)所示,写出 G 1 , G 2 G_1, G_2 G1,G2 的邻接矩阵。
解:
A ( G 1 ) = [ 1 1 0 0 0 0 1 0 1 1 0 0 0 0 1 1 ] A ( G 2 ) = [ 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 1 ] A(G_1)= \begin{bmatrix} 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0\\ 1 & 1 & 0 & 0 \\ 0 & 0 & 1 & 1 \end{bmatrix} \ A(G_2)= \begin{bmatrix} 1 & 1 & 1 & 1 \\ 1 & 0 & 1 & 0\\ 1 & 1 & 0 & 1 \\ 1 & 0 & 1 & 1 \end{bmatrix} A(G1)=⎣⎢⎢⎡1010101001010001⎦⎥⎥⎤ A(G2)=⎣⎢⎢⎡1111101011011011⎦⎥⎥⎤
当结点编号次序不同时,同一个图所得的邻接矩阵可能不同,但可以通过有限次的行、列变换而得到相同的邻接矩阵(同构的图?)。
通过图的邻接矩阵运算,可以判断图的一些性质。设 G = ⟨ V , E ⟩ G = \langle V, E\rangle G=⟨V,E⟩ 是有向线图, ∣ V ∣ = n |V| = n ∣V∣=n , A A A 是 G G G 的邻接矩阵。
1. A A T AA^T AAT 的元素的意义

可知, b i j = ∑ k = 1 n a i k ⋅ a j k b_{ij} = \displaystyle \sum^n_{k = 1} a_{ik} \cdot a_{jk} bij=k=1∑naik⋅ajk ,如图7.3.2所示,则在 G G G 中恰好有 b i j b_{ij} bij 个结点,从 v i v_i vi 和 v j v_j vj 均有边引出到这些结点 v k 1 , v k 2 , … , v k n v_{k_1}, v_{k_2}, \dots, v_{k_n} vk1,vk2,…,vkn 。特别地,当 i = j i = j i=j 时 b i j b_{ij} bij 表示 v i v_i vi 的出度。
2. A T A A^TA ATA 的元素的意义

可知, b i j = ∑ k = 1 n a k i ⋅ a k j b_{ij} = \displaystyle \sum^n_{k = 1} a_{ki} \cdot a_{kj} bij=k=1∑naki⋅akj ,如图7.3.3所示,则在 G G G 中恰好有 b i j b_{ij} bij 个结点,以这些结点为始点,既有边引入到 v i v_i vi 、又有边引入到 v j v_j vj 。特别地,当 i = j i = j i=j 时 b i j b_{ij} bij 表示 v i v_i vi 的入度。
3. A 2 = A × A A^{2} = A\times A A2=A×A 的元素的意义

若有 b i j = ∑ k = 1 n a i k ⋅ a k j b_{ij} = \displaystyle \sum^n_{k = 1} a_{ik} \cdot a_{kj} bij=k=1∑naik⋅akj ,如图7.3.4所示,则从 v i v_i vi 到 v j v_j vj 长度为 2 2 2 的路有 b i j b_{ij} bij 条。特别地,当 i = j i = j i=j 时 v i v_i vi 到自身长度为 2 2 2 的回路有 b i j b_{ij} bij 条。
对于 A m = A × A × ⋯ × A ⏟ m 个 A , m ≥ 1 A^m =\underbrace{ A\times A\times \dots \times A}_{m个A},\ m \ge 1 Am=m个A
A×A×⋯×A, m≥1 ,有如下结论。
定理7.3.1 设 G = ⟨ V , E ⟩ G = \langle V, E\rangle G=⟨V,E⟩ 为有向线图,结点集 V = { v 1 , v 2 , … , v n } V = \{ v_1, v_2, \dots, v_n\} V={
v1,v2,…,vn} , A = [ a i j ] n × n A = [a_{ij}]_{n\times n} A=[aij]n×n 为 G G G 的邻接矩阵, A m = [ a i j ( m ) ] n × n A^m = [a_{ij}^{(m)}]_{n\times n} Am=[aij(m)]n×n ,则 G G G 中从 v i v_i vi 到 v j v_j vj 有 a i j ( m ) a_{ij}^{(m)} aij(m) 条长度为 m m m 的路。
证明 对 m m m 进行归纳。
- 当 m = 1 , m = 2 m = 1, m = 2 m=1,m=2 时,由定义和上面的分析可知,显然成立;
- 设当 m = t ( t ≥ 2 ) m = t\ (t \ge 2) m=t (t≥2) 时,命题成立;
- 当 m = t + 1 m = t + 1 m=t+1 时,由
A t + 1 = A ⋅ A t = [ a i j ( t + 1 ) ] n × n = [ ∑ k = 1 n a i k ⋅ a k j ( t ) ] A^{t + 1} = A \cdot A^t = [a_{ij}^{(t + 1)}]_{n\times n} =\bigg [\ \sum^n_{k = 1} a_{ik} \cdot a_{kj}^{(t)}\ \bigg] At+1=A⋅At=[aij(t+1)]n×n=[ k=1∑naik⋅akj(t) ] 故 a i j ( t + 1 ) = ∑ k = 1 n a i k ⋅ a k j ( t ) \displaystyle a_{ij}^{(t + 1)} = \sum^n_{k = 1} a_{ik} \cdot a_{kj}^{(t)} aij(t+1)=k=1∑naik⋅akj(t) 。根据邻接矩阵的定义可知, a i k a_{ik} aik 表示结点 v i v_i vi 与 v k v_k vk 的长度为 1 1 1 的路的条数。根据归纳假设知, a k j ( t ) a_{kj}^{(t)} akj(t) 是连接 v k v_k vk 与 v j v_j vj 的长度为 t t t 的路的条数。因此, a i k ⋅ a k j ( t ) a_{ik} \cdot a_{kj}^{(t)} aik⋅akj(t) 表示从结点 v i v_i vi 出发、经过 v k v_k vk 、到达结点 v j v_j vj 的长度为 t + 1 t+1 t+1 的路的条数。
对所有的 k ∈ { 1 , 2 , … , n } k \in \{ 1, 2, \dots, n\} k∈{ 1,2,…,n} 求和得 a i j ( t + 1 ) = ∑ k = 1 n a i k ⋅ a k j ( t ) a_{ij}^{(t + 1)} = \displaystyle \sum_{k = 1}^n a_{ik} \cdot a_{kj}^{(t)} aij(t+1)=k=1∑naik⋅akj(t) , a i j ( t + 1 ) a_{ij}^{(t + 1)} aij(t+1) 就是从结点 v i v_i vi 到结点 v j v_j vj 的、所有长度为 t + 1 t + 1 t+1 的路的条数。故当 k = t + 1 k = t + 1 k=t+1 时命题也成立。
以上仅给出有向线图的一些基本结论,对于无向线图也有类似结论。
【例2】有向图 G = ⟨ V , E ⟩ G = \langle V, E\rangle G=⟨V,E⟩ 如图7.3.5所示,用 G G G 的邻接矩阵计算从顶点 v 3 v_3 v3 到 v 1 v_1 v1 的所有有向通路 path
。
解:图 G G G 的邻接矩阵为:
A = [ 0 1 0 0 0 0 1 1 0 1 0 1 1 1 0 0 ] A =\begin{bmatrix} 0 & 1 & 0 & 0\\ 0 & 0 & 1 & 1 \\ 0 & 1 & 0 & 1 \\ 1 & 1 & 0 & 0 \end{bmatrix} A=⎣⎢⎢⎡0001101101000110⎦⎥⎥⎤ 由 A [ 3 ] [ 1 ] = 0 A[3][1] = 0 A[3][1]=0 知(下标从1开始),从顶点 v 3 v_3 v3 到 v 1 v_1 v1 没有长度为 1 1 1 的通路。再计算 A 2 A^2