图的连通性和矩阵表示及计算3.2 图的连通性3.2.1 连通性如未说明,则本节的图G均是指无向图. 定义3.2.1 图G=中,设有结点vj与vk,若从vj到vk存在任何一条路径,则称结点vk从结点vj可达,也称结点vj与vk是连通的.约定,对任意结点v,v与v是连通的.定义3.2.2 若G是平凡图或G中任意两个结点都是连通的,则称G是连通图,否则,称G为非连通图或分离图.定义3.2.3 设G=是图,连通关系的商集为{V1,V2,...,Vm},则 其导出的子图G(Vi)(i=1,2,...,m)称为图G的连通分支,将图G的连通分支数记作W(G).显然,如果图G只有一个连通分支,则G是连通图.见例1定义3.2.4 设u与v是图G的两个结点,若u与v连通,则称u与v之间长度最短的路为u与v之间的短程线.短程线的长度可作为结点u与v间的距离,记作d(u,v).其满足下列性质: d(u,v)≥0,u=v时,d(u,v)=0 (非负性) d(u,v)=d(v,u) (对称性) d(u,v)+d(v,w)≥d(u,w) (三角不等式)若u与v不连通,则通常记作d(u,v)=∞.见例2无向图的连通性不能直接推广到有向图.在有向图G中,可达性是结点集上的二元关系,其为自反的和传递的,但不是对称的,因若从u到v有一条路时,不一定必有v到u的一条路,故有向图的可达性不是等价关系.若u,v可达,其间可能不止一条路,在所有这些路中,最短路的长度称为结点u与v间的距离,记作d.其满足下列性质:(1) d≥0;(2) d=0;(3) d+d≥d;(4) 若u不可达v,则通常记作d=∞;(5) 若u可达v,且v可达u时,d不一定等于d.见例3定义3.2.5 在简单有向图中,若在任何结点偶对中,至少从一个结点到另一个结点是可达的,则称图G是单向(侧)连通的.若在任何结点偶对中,两结点对互相可达,则称图G是强连通的;若图G的底图,即在图G中略去边的方向,得到的无向图是连通的,则称图G是弱连通的.显然,强连通的一定是单向连通的和弱连通的,单向连通的一定是弱连通的,但其逆均不真.见例3定理3.2.1 一个有向图是强连通的,当且仅当G有一个回路,且其至少包含每个结点一次证明见书.定义3.2.6 在简单有向图G=中,G'是G的子图,如果G'是强连通的(单向连通的、弱连通的),且没有包含G'的更大的子图G''是强连通的(单向连通的、弱连通的),则称G'是极大强连通(单向连通、弱连通)子图,又叫强分图(单向分图、弱分图).定理3.2.2 在有向图G=中,G的每一结点都在也只在一个强(弱)分图中.(在无向图中,类似的定理也成立)证明见书结点在同一单向分图中是相容关系(具有自反的和对称的二元关系).相容关系把结点分成最大相容类,最大相容集合是集合V的一个覆盖.每个最大相容类的结点导出一极大单向连通子图,因此有以下定理:定理3.2.3 在有向图G=中,G的每一结点都处在一个或一个以上的单向分图中.3.2.2 连通度定义3.2.7 设无向图G=为连通图,若有点集V1 V,使图G删除了V1的所有结点后,所得的子图是不连通图,而删除了V1的任何真子集后,所得的子图是连通图,则称V1是G的一个点割集.若某个结点构成一个点割集,则称该结点为割点.见例5定义3.2.8 若G为无向连通图且不含Kn为生成子图,则称k(G)=min{V1|,其中V1是G的一个点割集}为G的点连通度(简称连通度).规定:完全图Kn的点连通度为n,n≥1.非连通图的点连通度为0.若k(G)≥k,则称G为k-连通图.显然,点连通度k(G)是产生一个不连通图所需要删除的点的最少数目.见例6定义定义3.2.9 设无向图设无向图G=为连通图为连通图,若有边集若有边集E1 E,使图使图G删除了删除了E1的所有边后的所有边后,所得的子图是不连通图所得的子图是不连通图,而删除了而删除了E1的任何真子集后的任何真子集后,所得的子图是连通图所得的子图是连通图,则则称称E是是G的一个边割集的一个边割集.若某个边构成一个边割集若某个边构成一个边割集,则称该边则称该边为割边为割边(或桥或桥).见例见例7定义定义3.2.10 若若G为无向连通图为无向连通图,则称则称λ(G)=min{{|E1|||,其中其中E1是是G的一个边割集}为的一个边割集}为G的边连通度的边连通度.规定规定:非连通图的边连通度为非连通图的边连通度为0.若若λ(G)≥k,则称则称G为为k边边-连通图连通图.显然显然,边连通度边连通度λ(G)是产生一个不连通图所需要删除的边的最是产生一个不连通图所需要删除的边的最少数目少数目. 定理3.2.4 对于任意图G,有k(G)≤λ(G)≤δ(G)其中,k(G),λ(G),δ(G)分别为G的点连通度、边连通度和最小度。
证明见书定理3.2.5 一个连通无向图G中的结点v是割点的充分必要条件是存在两个结点u和w,使得结点u与w的每一条路都通过v.证明见书.3.3 图的矩阵表示与运算3.3.1 设G=是一个简单图,其中V={v1,v2,...,vn},则n阶方阵A(G)=(aij)称为G的邻接矩阵.其中: ,vi与vj相邻 ,vi与vj不相邻或i=j 见例1可以容易看出,当给定的简单图是无向图时,邻接矩阵为对称的.当给定的图是有向图时,邻接矩阵不一定对称.显然,图G的邻接矩阵与结点标定的次序有关.见例2有关邻接矩阵的一些性质与特征:(1) 图G的邻接矩阵是不唯一的,而是与V中的元素标定的次序有关.根据对图G的结点集V中各元素标定不同的次序,就可以得到图G的不同邻接矩阵,但这些邻接矩阵经过适当地交换行和列的次序,就可以从一个邻接矩阵变换到另一个邻接矩阵.根据这些不同的邻接矩阵所作的图都是同构的. (2) 当有向线图代表关系时,邻接矩阵就可看做是一种关系矩阵.有向线图代表关系是自反的,矩阵的对角线元素全为1;有向线图代表关系是反自反的,矩阵的对角线元素全为0;有向线图代表关系是对称的,矩阵是对称的;有向线图代表关系是反对称的,矩阵中以主对角线对称的元素不可能同时为1.(3) 零图的邻接矩阵的元素全为0,称该矩阵为零矩阵.(4) 当图的每一结点都有自回路而再无其他边时,图的邻接矩阵是单位矩阵.从图G的邻接矩阵可以得到图的一些重要性质:(1) 有向图G的邻接矩阵中,第i行的元素是由结点vi出发的边所确定的,若矩阵中第i行第j列的元素为1,则表示在图G中结点vi和vj之间有一条边相连,其中vi为起点,vj为终点.(2) 有向图G的邻接矩阵中,第i行中值为1的元素的数目等于从vi发出的边数,即为结点vi的出度;第j列中值为1的元素的数目等于进入结点vj的边数,即为结点vj的入度.(3) 结点间的通路数目在图形中很容易看出来,通过邻接矩阵的计算也可以获得,下面将说明利用矩阵乘法计算从结点vi到结点vj长度为2的路的数目的方法.设有向图G的结点集V={v1,v2,...,vn}其邻接矩阵为:A(G)=(aij)nxn按照矩阵的乘法规则可知,矩阵(A(G))2中第i行第j列的元素即为从结点vi到结点vj长度为2的路的数目.因为每条从结点vi到结点vj的长度为2的路的中间必经过一个结点vk,即vi→vk→vj(1≤k≤n).如果图中有路vivkvj存在,那么aik=akj=1,即aik•akj=1;反之,如果图G中不存在路vivkvj,那么aik=0或akj=0,既aik•akj=0.于是,从结点vi到结点vj长度为2的路的数目等于:ai1•a1j+ai2•a2j+...+ain•anj=(4) 邻接矩阵乘积的一般形式为:见书101页矩阵乘法:(A列=B行,A行乘B列)给出 m×n 矩阵 A 和 B,可定义它们的和 A + B 为一 m×n 矩阵,第( i,j) 项为 (A + B)[i, j] = A[i, j] + B[i, j]。
若给出一矩阵 A 及一数字 c,可定义标量积 cA,其中 (cA)[i, j] = cA[i, j] 若一矩阵的列数与另一矩阵的行数相等,则可定义这两个矩阵的乘积如 A 是 m×n 矩阵和 B 是 n×p矩阵,它们是乘积 AB 是一个 m×p 矩阵,其中 (AB)[i, j] = A[i, 1] * B[1, j] + A[i, 2] * B[2, j] + ... + A[i, n] * B[n, j] 此乘法有如下性质: (AB)C = A(BC) 对所有 k×m 矩阵 A, m×n 矩阵 B 及 n×p 矩阵 C ("结合律"). (A + B)C = AC + BC 对所有 m×n 矩阵 A 及 B 和 n×k 矩阵 C ("分配律") C(A + B) = CA + CB 对所有 m×n 矩阵 A 及 B 和 k×m 矩阵 C ("分配律") 要注意的是:可置换性不一定成立,即有矩阵 A 及 B 使得 AB ≠ BA可达矩阵及最短路径可达矩阵及最短路径3.3.2 可达矩阵定义3.3.2 设G=是一个简单图,|V|=n,假定G的结点已编序,即V={v1,v2,...vn},定义一个nxn方阵P=(Pij),其中: ,从vi到vj至少存在一条路 ,从vi到vj不存在路则称矩阵P为图G的可达矩阵.可达矩阵表明了图中任意两个结点间是否至少存在一条路以及在任何结点上是否存在回路.一般地,可以由图G的邻接矩阵A得到可达矩阵P.即令Bn=A+A2+...+An,将Bn中不为0的元素改为1,为零的元素不变,这样得到的矩阵即为可达矩阵P.可达矩阵的概念可推广到无向图中,只要将无向图的每一条边看成是具有相反方向的两条边,一个无向图就可以看成是有向图.无向图的邻接矩阵是一个对称矩阵,其可达矩阵称为连通矩阵.见例4通常可以将矩阵A,A2,...An分别改为布尔矩阵A,A(2),...A(n),以简化计算,故可达矩阵P=A∨A(2)∨...∨A(n),其中A(i)表示在布尔运算下A的i次方.见例53.4 最短路径3.4.1 最短路径问题路径是指两结点间的通路,路径的长度是指所有经过的边的总长."最短路径"的问题是指当两个结点间的通路多于一条时,如何找出边长总和最短的那条.最短路径的数学模型为:给定一个网络N(有向或无向赋权图),u0与v0是N中指定的两个结点,在N中找一条从u0到v0且权最小的路.规定N中的一条路P的权w(P)称为P的长度.若N中存在从u到v的路,则将N中从u到v且权最小的路称为u到v的最短路,其长度称为u到v的距离,记为dN(u,v).3.4.2 Dijkstra算法1.Dijkstra求最短路径算法的基本思想利用Dijkstra算法可以求解从某个源点到其他各结点间的最短路径.把结点分成两组,第一组是已确定最短路径的结点的集合,第二组是尚未确定最短路径的结点的集合,按路径长度递增的次序逐个把第二组的结点放到第一组中.设求从u0到其他各结点间的最短路径,则在任意时刻,从u0到第一组各结点间的最短路径都不大于从u0到第二组各结点间的最短路径.求无向网洛最短路径的Dijkstra算法可以推广到有向网洛最短路径.2.Dijkstra算法假定图G中边的权均为正的.若某条边的权为0,则可使其端点重合.若(u,v) E(G),则规定w(u,v)=+∞.实际计算时,可以用一个足够大的数来代替+∞.4.Dijkstra算法实现的基本方法设图以邻接矩阵arcs存储,矩阵中各元素的值为各边的权值.结点间无边时,其对应权值用无穷大表示.求从结点u0到其他各结点间的最短路径的具体步骤如下:(1) 初始化:第一组(集合s)只含结点u0,第二组(集合t)含有图中其余结点.设一dist向量,其下标是各结点,元素值是结点u0到各结点的边的权值.若u0到某结点无边,则dist向量中的对应值为无穷大.(2) 选dist中最小的权值,将其结点(j)加入s集合,s=s∪{j}.(3) 修改从结点u0到集合t(t=V-s)中各结点的最短路径长度,若dist[j]+arcs[j][k]
求解从起源点s到点j的最短路径算法的基本过程如下: 1) 初始化起源点设置为:① ds=0, ps为空;② 所有其他点: di=∞, pi=?;③ 标记起源点s,记k=s,其他所有点设为未标记的 2) 检验从所有已标记的点k到其直接连接的未标记的点j的距离,并设置:dj=min[dj, dk+lkj]式中,lkj是从点k到j的直接连接距离 3) 选取下一个点从所有未标记的结点中,选取dj 中最小的一个i:di=min[dj, 所有未标记的点j]点i就被选为最短路径中的一点,并设为已标记的 4) 找到点i的前一点从已标记的点中找到直接连接到点i的点j*,作为前一点,设置:i=j* 5) 标记点i如果所有点已标记,则算法完全推出,否则,记k=i,转到2) 再继续谢谢大家。