文章目录
一、图的基本概念
1.1 图的定义
定义1:图 G = ( V , E ) G=(V,E) G=(V,E) 是一个系统,其中V是非空有限集合,V中的元素称为结点;E是有限集合,E中的元素称为边;且E中的元素与V中的一对元素相连系。
例1:有四个城市 v 1 , v 2 , v 3 , v 4 v_{1},v_{2},v_{3},v_{4} v1,v2,v3,v4,其中 v 1 与 v 2 v_{1}与v_{2} v1与v2, v 1 与 v 4 v_{1}与v_{4} v1与v4, v 2 与 v 3 v_{2}与v_{3} v2与v3有公路相连。
答:上述事实可用图 G = ( V , E ) G=(V,E) G=(V,E)表示。图中结点集合V = { v 1 , v 2 , v 3 , v 4 v_1,v_2,v_3,v_4 v1,v2,v3,v4},图中边的集合E = { v 1 与 v 2 之 间 的 边 , v 1 与 v 4 之 间 的 边 , v 2 与 v 3 之 间 的 边 v_1与v_2之间的边,v_1与v_4之间的边,v_2与v_3之间的边 v1与v2之间的边,v1与v4之间的边,v2与v3之间的边}
例2:有四个程序,他们之间存在如下的调用关系: P 1 能 调 用 P 2 , P 2 能 调 用 P 3 , P 2 能 调 用 P 4 P_1能调用P_2,P_2能调用P_3,P_2能调用P_4 P1能调用P2,P2能调用P3,P2能调用P4。
答:上述事实也可用图 G = ( V , E ) G=(V,E) G=(V,E)表示。图中结点集合V = { P 1 , P 2 , P 3 , P 4 P_1,P_2,P_3,P_4 P1,P2,P3,P4},图中边的集合E = { P 1 到 P 2 的 边 , P 2 到 P 3 的 边 , P 2 到 P 4 的 边 P_1到P_2的边,P_2到P_3的边,P_2到P_4的边 P1到P2的边,P2到P3的边,P2到P4的边}
定义2:图 G = ( V , E ) G=(V,E) G=(V,E)是一个系统,其中V是非空有限集合,V中的元素称为结点;E是集合V上的关系 E ⊆ V × V E \subseteq V \times V E⊆V×V,E中的元素称为边。
例3:同例1,例2。
答:例1可表示为:V = { v 1 , v 2 , v 3 , v 4 v_1,v_2,v_3,v_4 v1,v2,v3,v4},E = { ( v 1 , v 2 ) , ( v 2 , v 1 ) , ( v 1 , v 4 ) , ( v 4 , v 1 ) , ( v 2 , v 3 ) , ( v 3 , v 2 ) (v_1,v_2),(v_2,v_1),(v_1,v_4),(v_4,v_1),(v_2,v_3),(v3_,v_2) (v1,v2),(v2,v1),(v1,v4),(v4,v1),(v2,v3),(v3,v2)}。
例2 可表示为: V = { P 1 , P 2 , P 3 , P 4 } , E = { ( P 1 , P 2 ) , ( P 2 , P 3 ) , ( P 2 , P 4 ) } V = \{P_1,P_2,P_3,P_4\},E = \{(P_1,P_2),(P_2,P_3),(P_2,P_4)\} V={ P1,P2,P3,P4},E={ (P1,P2),(P2,P3),(P2,P4)}。
定义3:设V是非空有限集合 ∑ \sum ∑ 是一个标号集合, E ⊆ V × ∑ × V E \subseteq V \times \sum \times V E⊆V×∑×V, 称 G = ( V , ∑ , E ) G = (V, \sum, E) G=(V,∑,E)为一个图。称V中的元素为G的结点;设 u , v ∈ V u, v \in V u,v∈V, σ ∈ ∑ \sigma \in \sum σ∈∑, 若 ( u , σ , v ) ∈ E (u,\sigma,v)\in E (u,σ,v)∈E,则称 ( u , σ , v ) (u,\sigma,v) (u,σ,v)为G中的一条边,此边起自于u终止与v;称u为边 ( u , σ , v ) (u,\sigma,v) (u,σ,v)的起点,v为边 ( u , σ , v ) (u,\sigma,v) (u,σ,v)的重点,起点或终点统称为边 ( u , σ , v ) (u,\sigma,v) (u,σ,v)的端点。
定义4:图 G = ( V , E ) G=(V,E) G=(V,E) 是一个系统。其中V是结点的非空有限集合;E是边的有限集合; γ \gamma γ 是边到结点集的一个关联函数,即 γ : E → 2 V \gamma:E \to 2^V γ:E→2V。一般来说,它将E中的每条边 e ∈ E e \in E e∈E 与结点集V中的一个二元子集 { u , v } ∈ 2 V \{u,v\} \in 2^V { u,v}∈2V 相关联,即 γ ( e ) = { u , v } \gamma(e) = \{u,v\} γ(e)={ u,v},结点u和v统称为边e的端点。
1.2 图的常见类型
对图的定义一般采用定义2的方式,并将拥有n个结点,m条边的图称为(n,m)图。
设 G = ( V , ∑ , E ) G = (V,\sum,E) G=(V,∑,E),图的类型一般有:
- 无向图:在图G中,若 ( u , σ , v ) (u,\sigma,v) (u,σ,v)与 ( v , σ , u ) (v,\sigma,u) (v,σ,u)表示同一条边,则称此边为无向边;若G中所有边都是无向边,则称G为无向图
- 有向图:若G中所有边都是有向边,则称G为有向图。
- 混合图:若G中,既有有向边,又有无向边,则称这种图为混合图。
- 零图:若在图G中E = ∅ \emptyset ∅,则称G为零图。
- 平凡图:称只有一个结点的图为平凡图。
设 G = ( V , ∑ , E ) G = (V,\sum,E) G=(V,∑,E),边与边,结点与边,结点与结点之间的关系一般有:
- 边邻接:若G中有两条边有一个公共端点,则称此二边邻接。
- 结点相邻:若G中的两个结点是同一条边上的两个端点,则称此二结点相邻。
- 关联:若G中的节点v是边e的端点,则称节点v与边e相关联。
- 孤立点:不与任何边相关联的点称为孤立点。
- 自环:关联于同一节点的一条边称为自环。
在图G中,边的关系一般有:
- 平行边:若两条边有相同的端点(对有向图则有相同的起点和终点),则称此二边为平行边。
- 重数:两节点之间平行边的条数成为平行边的重数。
- 多重图:若图G中有平行边存在,则称此图为多重图。
- 简单图:若图G中无平行边且无自环,则称图G为简单图。
1.3 子图与补图
定义5:设 G = ( V , E ) G=(V,E) G=(V,E)为简单图,若G中每一对不同的结点间都有边相连,则称G为完全图。
设G有n个结点,m条边。当G为无向完全图是,则有m = n(n-1)/2;当G为有向完全图时,则有m = n(n-1)。一般将n个节点的无向完全图记为 K n K_n Kn。
定义6:设有图G= (V,E)和图 G ‘ = ( V ‘ , E ‘ ) G^` = (V^`,E^`) G‘=(V‘,E‘)
- 子图:若 V ‘ ⊆ V V^` \subseteq V V‘⊆V , E ‘ ⊆ E E^` \subseteq E E‘⊆E,则称 G ‘ G^` G‘为G的子图。
- 真子图:若 V ‘ ⊂ V V^` \subset V V‘⊂V , E ‘ ⊂ E E^`\subset E E‘⊂E,则称 G ‘ G^` G‘为G的真子图。
- 生成子图(又称支撑子图): V ‘ = V V^` = V V‘=V , E ‘ ⊆ E E^`\subseteq E E‘⊆E,则称 G ‘ G^` G‘为G的生成子图。
- 平凡子图: V ‘ = V V^` = V V‘=V , E ‘ = E E^` = E E‘=E 或 V ‘ = V V^` = V V‘=V , E ‘ = ∅ E^` = \emptyset E‘=∅,称这两个子图为平凡子图。
定义7:设 G = ( V , E ) G=(V,E) G=(V,E)为一简单图, G ∗ = ( V , E ∗ ) G^* = (V,E^*) G∗=(V,E∗)为完全图,称 G ‾ = ( V , E ‾ ) \overline{G} = (V,\overline{E}) G=(V,E)为G的补图,其中 E ‾ = E ∗ \overline{E} = E^* E=E∗ \ E E E.
定义8:设 G = ( V , E ) G=(V,E) G=(V,E)是图,
- 当G为有向图时,G中以v为起点的边的条数成为v的出度,记为 d e g ← ( v ) \overleftarrow{deg}(v) deg(v);以v为终点的边的条数成为v的入度,记为 d e g → ( v ) \overrightarrow{deg}(v) deg(v);入度和出度之和成为v的度,记为 d e g ( v ) deg(v) deg(v)。
- 当G为无向图时,以v为端点的边的条数称为v的度,记为 d e g ( v ) deg(v) deg(v)。
当某节点的度数为奇数,称此结点为奇结点;若结点的度数为偶数,则称此节点为偶结点;
称度数为1的节点为悬挂点,与悬挂点关联的边称为悬挂边。
定理1:设 G = ( V , E ) G=(V,E) G=(V,E)是(n,m)无向图,则 ∑ i = 1 n d e g ( v i ) = 2 m \sum_{i=1}^n{deg(v_i)} = 2m ∑i=1ndeg(vi)=2m。
定理2:设 G = ( V , E ) G=(V,E) G=(V,E)是(n,m)有向图,则 ∑ i = 1 n d e g ← ( v i ) = ∑ i = 1 n d e g → ( v i ) = m \sum_{i=1}^n{\overleftarrow{deg}(v_i)} = \sum_{i=1}^n{\overrightarrow{deg}(v_i)} = m ∑i=1ndeg(vi)=∑i=1ndeg(vi)=m。
定理3:设 G = ( V , E ) G=(V,E) G=(V,E)是(n,m)无向图,则奇结点的个数为偶数。
二、图的同构
1.1 图的同构的定义
定义9:设 G = ( V , E ) G=(V,E) G=(V,E)和 G ‘ = ( V ‘ , E ‘ ) G^`=(V^`,E^`) G‘=(V‘,E‘)是两个简单无向图,若存在从V到 V ‘ V^` V‘的双射函数h,使得 e = { v i , v j } ∈ E e = \{v_i,v_j\} \in E e={ vi,vj}∈E 当且仅当 e ‘ = { h ( v i ) , h ( v j ) } ∈ E ‘ e^` = \{h(v_i),h(v_j)\}\in E^` e‘={ h(vi),h(vj)}∈E‘,则称图G与图 G ‘ G^` G‘同样。
必要条件(不是充分条件):
- 结点数相等;
- 边数相等;
- 度数相同的结点个数相等。
注意同构是一个等价关系、
定义10:设 G = ( V , E ) G=(V,E) G=(V,E)和 G ‘ = ( V ‘ , E ‘ ) G^` = (V^`,E^`) G‘=(V‘,E‘)是两个简单有向图,若存在从V到 V ‘ V^` V‘的双射函数h,使得 e = { v i , v j } ∈ E e = \{v_i,v_j\} \in E e={ vi,vj}∈E 当且仅当 e ‘ = { h ( v i ) , h ( v j ) } ∈ E ‘ e^` = \{h(v_i),h(v_j)\}\in E^` e‘={ h(vi),h(vj)}∈E‘,则称图G与图 G ‘ G^` G‘同构。
三、路与圈
3.1 路与圈的定义
定义11:设 G = ( V , E ) G=(V,E) G=(V,E),W是G的有限非空点边交错序列 W = v 0 e 1 v 1 e 2 v 2 … e k v k W = v_0e_1v_1e_2v_2…e_kv_k W=v0e1v1e2v2…ekvk 称W为G的一条从 v 0 v_0 v0到 v k v_k vk的途径,称 v 0 v_0 v0为途径的起点, v k v_k vk为途径的终点,k为途径的长度。
定义12:在途径W中,如 v 0 ≠ v k v_0 \not= v_k v0=vk,则称W是从 v 0 v_0 v0到 v k v_k vk的一条路;若 v 0 = v k v_0 = v_k v0=vk,则称W是圈。
定义13:无重复边的路称为简单路,无重复边的圈称为简单圈,无重复点的路称为初级路,无重复点的圈称为初级圈。
定理4:设 G = ( V , E ) G=(V,E) G=(V,E)为一简单图,|V| = n,则:
- G中任一初级路的长度不超过n-1;
- G中任一初级圈的长度不超过n。
3.2 路与圈的可达性
定义14:设 G = ( V , E ) G=(V,E) G=(V,E)是图,任取u,v ∈ \in ∈ V,如果G中存在一条从u到v的路,则称u可达v。(规定u到自己总是可达的)
无向图中,从u可达v,很明显,v可达u成立;
然而有向图中,u可达v,v不一定可达u。所以规定: u , v 相 互 可 达 ↔ u 可 达 v ∧ v 可 达 u u,v相互可达 \leftrightarrow u可达v \wedge v可达u u,v相互可达↔u可达v∧v可达u。
从u可达v的所有路中最短的那一条称为短程线(短线程不一定是唯一的)。并经短程线的长度叫做从u到v的距离,用 d ( u , v ) d(u,v) d(u,v)表示。规定:
- d ( u , v ) = 0 d(u,v)=0 d(u,v)=0;
- 若u到v不可达,则 d ( u , v ) = ∞ d(u,v)=\infty d(u,v)=∞
3.3 图的连通性
3.3.1 无向图的连通性
定义15:设 G = ( V , E ) G=(V,E) G=(V,E)是无向图,如果G中任意两结点间均可达,则称图G是连通的,即G是连通图,否则称图G是非连通的,即G是非连通图。
极大连通子图:对于无向图(并不一定是连通的),如果是连通图,那自己就是极大连通子图;如果是非连通图,则必然有独立出来的路或圈,而将这些部分按照相互不连通,进行划分,每一个划分块都是给定图的一个连通子图,而在每一个划分块中结点间的可达性已达到极大限度。
定义16:设 G = ( V , E ) G=(V,E) G=(V,E)为无向图,G的一个极大连通子图称为G的一个连通支。(非连通无向图中一般连通支数 ≥ \geq ≥ 2。)
3.3.2 有向图的连通性
定义17:设 G = ( V , E ) G=(V,E) G=(V,E)为有向图,
- 若G中任意两结点间都是相互可达的,则称G是强连通的;
- 若G中任意两结点间至少有一结点可到达另一结点,则称G是单连通的;
- 若略去边的方向后,G的无向图时连通的,则称G是弱连通的。
(弱连通,可能既不是单连通的,也不是强联通的;强联通一定是单连通和弱连通的;单连通一定是弱连通的,但不一定是强联通的。)
定义18:设 G = ( V , E ) G=(V,E) G=(V,E)是简单有向图,称G的极大的强连通子图为G的强连通支;称G的极大的单向连通子图为G的一个单向连通支;称G的极大的若连通子图为G的一个若连通支。(注意:提到强,单向,弱就是有向图)
有向图的强连通性及弱连通性建立了G中节点集合V上的等价关系,即有向图强/弱连通性都可以通过结点集合V来表示,但两者还是有区别的。
对弱连通,不仅建立了结点集上的划分,而且还建立了边集上的划分。
设$G_1,G_2,…,G_k,为G的所有弱连通支,则有:
V ( G 1 ) ∪ V ( G 2 ) ∪ . . . ∪ V ( G k ) = V ( G ) E ( G 1 ) ∪ E ( G 2 ) ∪ . . . ∪ E ( G k ) = E ( G ) \begin{matrix} V(G_1) \cup V(G_2) \cup ... \cup V(G_k) = V(G) \\ E(G_1) \cup E(G_2) \cup ... \cup E(G_k) = E(G) \end{matrix} V(G1)∪V(G2)∪...∪V(Gk)=V(G)E(G1)∪E(G2)∪...∪E(Gk)=E(G)
当 i ≠ j i \not= j i=j时,有:
V ( G i ) ∩ V ( G j ) = ∅ E ( G i ) ∩ E ( G j ) = ∅ \begin{matrix} V(G_i) \cap V(G_j) = \emptyset \\ E(G_i) \cap E(G_j) = \emptyset \\ \end{matrix} V(Gi)∩V(Gj)=∅E(Gi)∩E(Gj)=∅
对强连通,只能建立结点集上的划分,而不能建立边集上的划分。
设$G_1,G_2,…,G_k,为G的所有强连通支,则有:
V ( G 1 ) ∪ V ( G 2 ) ∪ . . . ∪ V ( G k ) = V ( G ) E ( G 1 ) ∪ E ( G 2 ) ∪ . . . ∪ E ( G k ) ⊆ E ( G ) \begin{matrix} V(G_1) \cup V(G_2) \cup ... \cup V(G_k) = V(G) \\ E(G_1) \cup E(G_2) \cup ... \cup E(G_k) \subseteq E(G) \end{matrix} V(G1)∪V(G2)∪...∪V(Gk)=V(G)E(G1)∪E(G2)∪...∪E(Gk)⊆E(G)
当 i ≠ j i \not= j i=j时,有 V ( G i ) ∩ V ( G j ) = ∅ V(G_i) \cap V(G_j) = \emptyset V(Gi)∩V(Gj)=∅
定理5:在简单有向图 G = ( V , E ) G=(V,E) G=(V,E)中:
- 每一个结点及每一条边恰在一个弱连通中;
- 每一个结点恰在一个强连通支中;
- 每一个结点,每一条边至少属于一个单向连通支。
四、图的矩阵表示
4.1 邻接矩阵
4.1.1 邻接矩阵的定义及强行命名
定义19:设 G = ( V , E ) G=(V,E) G=(V,E)是简单有向图, V = v 1 , v 2 , . . . , v n V={v_1,v_2,...,v_n} V=v1,v2,...,vn被强行命名,称n阶方阵 A = ( a i j ) n × n A = (a_{ij})_{n \times n} A=(aij)n×n为G的邻接矩阵。其中:
a i j = { 1 , ( v i , v j ) ∈ E 0 , ( v i , v j ) ∉ E a_{ij}=\begin{cases} 1,&(v_i,v_j) \in E \\ 0,&(vi,vj) \notin E \end{cases} aij={
1,0,(vi,vj)∈E(vi,vj)∈/E
定义中的强行命名是指:给 V V V中的各结点从 v 1 到 v n v_1到v_n v1到vn确定一个排队的次序。当强行命名改变时,即结点次序改变,图的邻接矩阵也会变化。
对于一个给定的图,我们能用一个主对角线全为零的方阵将结点间的邻接关系反应出来;
对于一个对角线全为零、元素为0或1的方阵,我们可以将其表示成一个图。
若图 G 1 与 G 2 G_1与G_2 G1与G2同构,则它们相对应的邻接矩阵 A ( G 1 ) 与 A ( G 2 ) A(G_1)与A(G_2) A(G1)与A(G2)或者相同,或者其中的一个通过行与列的交换能转换成另一个。
- 零图:邻接矩阵元素全是零;
- 完全图:除对角线上全是零外,其余元素均为1;
- 图对称:邻接矩阵按主对角线对称,即 A = A T A = A^{T} A=AT
4.1.2 利用邻接矩阵求各结点的入度和出度
如:
A = [ 0 1