数学建模图论模型图论
《数学建模图论》PPT课件
问题:如何从状态(1,1,1,1)转移到(0,0,0,0)?
方法:从(1,1,1,1)开始,沿关联边到达没有到达 的相邻顶点,到(0,0,0,0)终止,得到有向图即是。
16
h
图论的基本概念
例2、考虑中国象棋的如下问题: (1)下过奇数盘棋的人数是偶数个。 (2)马有多少种跳法? (3)马跳出后又跳回起点,证明马跳了偶数步。 (4)红方的马能不能在自己一方的棋盘上不重复 的跳遍每一点,最后跳回起点?
……
7
h
图论的基本概念
问题4(关键路径问题): 一项工程任务,大到建造一座大坝,一座体育中心,
小至组装一台机床,一架电视机, 都要包括许多工序.这 些工序相互约束,只有在某些工序完成之后, 一个工序 才能开始. 即它们之间存在完成的先后次序关系,一般 认为这些关系是预知的, 而且也能够预计完成每个工序 所需要的时间.
① 赋初值. 对所有i, j, dij = aij, rij = j. k = 1. 转v向5 ②.
② 更新dij , rij . 对所有i, j, 若dik + dk j<dij , 则令dij = dik + dkj , rij = k, 转向③;
③ 终止判断. 若k = n终止; 否则令k = k + 1, 转向
径P ( u, v) 的权或长度(距离).
定义 2 若P0 ( u, v) 是G 中连接u, v的路径, 且对 任意在G 中连接u, v的路径P (u, v)都有F ( P0 ) ≤F ( P ), 则称P0 ( u, v) 是G 中连接u, v的最短路.
26
数学建模-图论模型
思路分析
• 每学期任课老师都有一定工作量的要求往往可能要上不止一门课 程。
• 每位同学需要在学期内完成若干门课程的学习。 • 某些对上课设施有特殊要求的课程,也不可以安排在同一时间。 • 为了方便开展一些全校性的活动,有些时段不安排课程。 • 受到教室数量的限制,在同一时段无法安排太多的课程。
模型建立
• 以每个课程为顶点,任何两个顶点之间连一条边当且仅当两门课 程的任课老师为同一人,或有学生同时选了这两门课或上课教室 冲突。
• 那么一个合理的课程安排就是将图中的点进行分化,使得每一个 部分里的点为一个独立集。
• 通过极小覆盖找出图中的极 大独立集,然后删去该极大 独立集,在剩下的图中找出 极大独立集,直到剩下的图 为一个独立集。
匈牙利算法
• 饱和点:M是图G的一个匹配,若G中顶点v是M中某条边的端 点,则称M饱和v,否则称v是M的非饱和点。
• 可扩路:一条连接两个非饱和点x和y的由M外的边和M的边交错 组成的路称为M的(x,y)可扩路。
• 算法基本步骤:
Kuhn-Munkres算法
1.2 图的独立集应用
• 问题描述:各大学学期临近结束时,需要根据老师任课 计划和学生选课情况,再结合教室资源情况安排下一学 期的课程及上课时间和地点。下表所示是某大学电信学 院的大三各专业部分课程情况。该学院每届学生按专业 分班,统一选课。另外,学院只有一间普通机房和一间 高级机房。那么应该如何合理地排这些课程呢?
则称其是双连通或强连通的。对于不是双连通的图,都可以分解成 若干个极大的双连通分支,且任意两分支之间的边是同向的。
举例:
• 右图所示竞赛图不是双连通的
•
为一条有向
的D哈密尔A顿路B。 C E
数学建模 离散模型图论选讲
v2 v5
v6 v1 v3
v2 v5 v6
v3
v1
v2
v4
v2
树与图的最小树
• 赋权图中求最小树的方法:破圈法和避圈法 破圈法:任取一圈,去掉圈中最长边,直到无圈。 v3 v1 v5 8 7 5 v2 4 3
8
v4 v3
5
1 v6 v5
26v14源自521v6 边数=n-1=5
v2
3
v4
树与图的最小树
C
E
树与图的最小树
树是图论中结构最简单但又十分重要的图。在自然和社会领 域应用极为广泛。 例 乒乓求单打比赛抽签后,可用图来表示相遇情况,如下 图所示。
运动员 A
B C
D
E
F G
H
树与图的最小树
• 例 某企业的组织机构图也可用树图表示。
厂长
人事科
财务科
总工 程师
生产副 厂长
经营副 厂长
开发科
技术科
• 图的模型应用
图的基本概念与模型
例 有甲,乙,丙,丁,戊,己6名运动员报名参加A,B,C,D,E,F 6个项目的比赛。下表中打√的是各运动员报告参加的比赛 项目。问6个项目的比赛顺序应如何安排,做到每名运动员 都不连续地参加两项比赛。
甲 乙 丙 丁 戊 己
A √ √ √ √
B
C
√
√
D √ √
E
F
得到最小树: v1 4 2 v2 3 v4
v3 5
v5 1 v6 Min C(T)=15
树与图的最小树
•避圈法:
•去掉G中所有边,得到n个孤立点;然后加边。 •加边的原则为:从最短边开始添加,加边的过程中不能形 成圈,直到点点连通(即:n-1条边)。 v3 v1 v5 8 7 5 v2 4 3 v4
数学建模图论模型
任意两点均有通路的图称为连通图。
连通而无圈的图称为树,常用T=<V,E>表示树。
若图G’是图 G 的生成子图,且G’又是一棵树, 则称G’是图G 的生成树。
例 Ramsey问题
图1
图2
并且常记: V = v1, v2, … , vn, |V | = n ; E = {e1, e2, … , em}ek=vivj , |E | = m
称点vi , vj为边vivj的端点 在有向图中, 称点vi , vj分别为边vivj的 始点和终点. 该图称为n,m图
8
对于一个图G = V, E , 人们常用图形来表示它, 称其 为图解 凡是有向边, 在图解上都用箭头标明其方向.
4、P'代替P,T'代替T,重复步骤2,3
定理2 设 T为V的子集,P=V-T,设 (1)对P中的任一点p,存在一条从a到p的最短路径,这条路径仅有P中的
点构成, (2)对于每一点t,它关于P的指标为l(t),令x为最小指标所在的点, 即:
l(x)mli(tn )} t{ ,T
(3)令P’=P Ux,T’=T-{x},l’(t)表示T'中结点t关于P'的指标,则
解:用四维01向量表示人,狼,羊,菜例在过河西河岸问的题状态(在
岸则分量取1;否则取0),共有24 =16 种状态; 在河东岸 态类似记作。
由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允许的
其对应状态:(1,0,0,1), (1,1,0,0),(1,0,0,0)也是不允许
数学建模方法之图论模型
定理 d (v) 2.
vV
推论 任何图中奇点 的个数为偶数. d (v1) 4
d (u3) 1
d (u3) 2
一个顶点记为 ui1,置 Si1 Si {ui1}.
3) 若 i 1,则停Hale Waihona Puke ;若 i 1,则用 i+1 代
替i,并转2).
S0 {u0},l(u j ) , j 1,2,...,7.
u1 S0 l(u1) min{,0 1}
Dijkstra算法: 求G中从顶点u0到其余顶点的最短路.
G[{v1,v2,v3}] G[{e3,e4,e5,e6}]
3) 若 V V,且 V ,以 V 为顶点集,以两端点 均在V 中的边的全体为边集的图 G 的子图,称 为G的由V 导出的子图,记为 G[V ] .
4) 若E E,且 E ,以 E为边集,以 E 的端点 集为顶点集的图 G 的子图,称为 G 的由E 导出的
第二讲 图论模型
1. 问题引入与分析
2. 图论的基本概念
3. 最短路问题及算法
4. 最小生成树及算法
回
5. 旅行售货员问题
停
6. 模型建立与求解 下
1. 问题引入与分析
1) 98年全国大学生数学建模竞赛B题“最佳灾 情巡视路线”中的前两个问题是这样的:
今年(1998年)夏天某县遭受水灾. 为考察灾情、 组织自救,县领导决定,带领有关部门负责人到 全县各乡(镇)、村巡视. 巡视路线指从县政府 所在地出发,走遍各乡(镇)、村,又回到县政 府所在地的路线.
数学建模——图论篇
软件学院
图论原理
在图G1中, 满足充分条件Δ(G)=4 δ(G)=2任意两个 结点度数之和大于等于5,所以是H图.
1
5
4
G1 2 3
a
G2 b c
d
e1 e e5 2 B e6 e3 e 4 C e7
D
V={A,B,C,D} E={e1, e2, e3, e4, e5 e6, e7} 人们茶余饭后经常到桥上散步,从而提出这样问题:是否 可以从某地出发,每座桥都走一次,再回到出发点. 很多 人试图找出这样的路径, 都没有找到. 后来欧拉证明这样 的路径根本不存在. 此图可以抽象为上边右图.
软件学院
图论原理 一. 图的概念 一个图 G=<V(G),E(G)>, 其中结点集V(G):是G的结 点的非空集合.(V(G)≠Φ),简记成V;边集E(G):是 G的边的集合. 有时简记成E. 结点: 用 表示, 旁边标上该结点的名称. 边:有向边:带箭头的弧线.从u到v的边表示成(u,v) 无向边:不带箭头的弧线.u和v间的边表示成(u,v)
v4 1 v5
软件学院
图论原理 通路与回路 1.通路的定义:给定图G=<V,E >,v0 ,v1,v2,,…,vn∈V, e1,e2,,…,en∈E,其中ei是关联vi-1,vi的边,则称 结点和边的交叉序列为图的通路。 如v0 e1v1 e2v2…envn是连接v0到vn的路.v0是此路的起 点,vn是此路的终点.路中含有的边数n称之为路的长度. 如果其中每条边的终点总是下一条边的起点,则边的 序列可以简写成(v0,v1,v2,…,vn) e v0 1 e4 例如右图中: v1 v2 e2 e3 e5 e6 v0 e2v3 e6v2是一条长度为2的路.
数学建模--图论模型(2)
数学与统计学院 李书选
shuxuanli@
2012/07/18
数学建模 –图论模型(2)
4. 最小生成树及算法 5. 旅行售货员问题 6. 中国邮递员问题
回
停 下
4.最小生成树及算法
1) 树的定义与树的特征 定义 连通且不含圈的无向图称为树.常用T表示. 树中的边称为树枝. 树中度为1的顶点称为树叶. 孤立顶点称为平凡树.
2)图的生成树
定义 若T是包含图G的全部顶点的子图,它又是树, 则称T是G的生成树. 图G中不在生成树的边叫做弦.
定理3 图G=(V,E)有生成树的充要条件是图G是连 通的.
证明 必要性是显然的.
充分性:任取 u1 V ,令集合V1 {u1},这时生成
( 树T 的边集 ET1) 为空集. 因为 G 是连通图, 点集V1与
取一圈{v1e1v2e6v5e8v3e2v1},去掉 e6 .
B 破圈法
例 用破圈法求出下图的另一棵生成树.
取一圈{v1e1v2e3v3e2v1}, 去掉 e3 ; 取一圈{v1e1v2e4v4e5v3e2v1},去掉 e4 ; 取一圈{v1e1v2e6v5e8v3e2v1},去掉 e8 ;
取一圈{v1e1v2e6v5e7v4e5v3e2v1}去掉 e6 ; 得到另一颗生成树.
仍能找到边 ei 满足其一端在点集Vi ,另一端在点
(i V \ Vi 中. 由于 ei 有一端在Vi 之外,所以Vi 与 ET ) 集
中的边不构成圈. 当 i n 时,得到
( Vn {u1, u2 ,...,un} V , ETn) {e1, e2 ,...,en1},
即图T
(n) 由定理 2 知, (V , ET ) 有 n 1条边且无圈,
数模培训图论模型
根据此图便可找到渡河方法.
2020/11/21
数模培训图论模型
(1,1,1,1) (1,1,1,0) (1,1,0,1) (1,0,1,1) (1,0,1,0) (0,0,0,0) (0,0,0,1) (0,0,1,0) (0,1,0,0) (0,1,0,1)
2020/11/21
数模培训图论模型
图的定义
图论中的“图”并不是通常意义下的几何图形或物 体的形状图, 而是以一种抽象的形式来表达一些确定的 事物之间的联系的一个数学系统.
定义1 一个有序二元组(V, E ) 称为一个图, 记为G = (V, E ), 其中
① V称为G的顶点集, V≠, 其元素称为顶点或结点,
例 一摆渡人欲将一只狼,一头羊,一篮菜从河西渡过 河到河东.由于船小,一次只能带一物过河,并且狼与羊, 羊与菜不能独处.给出渡河方法.
解:用四维0-1向量表示(人,狼,羊,菜)在河西岸的 状态(在河西岸则分量取1,否则取0),共有24 =16 种状态. 在河东岸的状态类似记作.
由题设,状态(0,1,1,0),(0,0,1,1),(0,1,1,1)是不允许的, 从而对应状态(1,0,0,1), (1,1,0,0), (1,0,0,0)也是不允许的.
数模培训图论模型
2020/11/21
数模培训图论模型
图论模型
1. 图论基本概念 2. 最短路径算法 3. 最小生成树算法 4. 遍历性问题 5. 二分图与匹配
6. 网络流问题 7. 关键路径问题 8. 系统监控模型 9. 着色模型
2020/11/21
数模培训图论模型
1、图论的基本概念
数学建模-图论篇
data
firstarc
nextvex
边结点表中的结点的表示:
data:结点的数据场,保存结点的 数据值。
firstarc:结点的指针场,给出自该 结点出发的的第一条边的 边结点的地址。
nextvex:结点的指针场,给出该结 点的下一结点的地址。
info:边结点的数据场,保存边的 权值等。
adjvex:边结点的指针场,给出本
2C 3D
20 30 ∧
data firstin firstout
tailvex headvex hlink tlink
0
1
02
∧
31∧
2
3
∧∧
3 2 ∧∧
图的存储结构
4、邻接多重表
•结点表中的结点的表示
:
data
firstedge
data:结点的数据域,保存结点的 数据值。
firstedge: 结点的指针域,给出自该
A
B
E
表示成右图矩阵
C
D
011 00 100 11 1000 1 0100 1 0111 0
图的存储结构
1、邻接矩阵和加权邻接矩阵(labeled adjacency matrix)(续)
•有向图的加权邻接矩阵
设有向图具有 n 个结点,则用 n 行 n 列的矩阵 A 表示该有向图;
并且 A[i,j] = a , 如果i 至 j 有一条有向边且它的权值为a。A[i,j] =无穷,如果 i 至 j 没有一条有向边。
邻接表
十字链表
邻接多重表
1、邻接矩阵和加权邻接矩阵(labeled adjacency matrix) •无权值的有向图的邻接矩阵
设有向图具有 n 个结点,则用 n 行 n 列的布尔矩阵 A 表示该有向图;
图论模型 【数学建模精品资源】
Floyd 算法的基本思想是:从图的带权邻接 矩阵 A = [a(i, j)]nn 开始,在 A 中用插入顶点的 方法依次构造出 n 个矩阵 D(1)、D(2)、…、D(n), 使最后得到的矩阵 D(n) 成为图的距离矩阵,即 矩阵 D(n) 的 i 行 j 列元素便是 i 号顶点到 j 号顶 点的距离。构造 D(i) 的同时,也引入一个路由 矩阵 P(i) 来记录两点间的最短路径。
4
0 2
2 0
1 3 3,
3 0 5
2 3 1 3 5 0
插入点 v3,得:
di(jk) min{di(jk1), di(kk1) dk(jk1)},
0 1 5 7 2
1 2 2 3 5 6
1
0
4
6 3
1
2
3
3
5
1
D(3)
5
7
2
4 6 3
0 2 1
2 0 3 3
则由点vi到v j 的最短路的路径为: vi ,vak ,,va2 ,va1,vb1,vb2 ,,vbm ,v j.
vi vak va3 va2 va1 vb1 vb2 vbm v j
例 求下图中加权图的任意两点间的距离与路径.
0 1 2
1
0
4
4
D (0)
4
0 2
2 0
1 3 3,
3 0 5
2 4 1 3 5 0
1 2 3 4 5 6
1
2
3
4
5
6
R (0)
1
1
2 2
3 3
4 4
5 5
6 6,
1 2 3 4 5 6
1 2 3 4 5 6
数学建模图论模型及其算法设计(上午)
首先考虑换乘次数最少的线路选择模型,首 先建立直达矩阵如下:
数学建模-图论
二、图的矩阵表示(应用实例及解法分析)
0 0 A 1 1 1 0 0 1 0 1 1 1 0 1 1 1 0 1 0 1 1 1 1 1 0
计算A2得到:
特别地, 若对任意 x X ,则 x 与 Y 中每个顶点 相邻,则称图 G (V , E ) 为完全二分图 ,记为 K X , Y 。
2 2012年8月11日
数学建模-图论
一、图的基本概念
设 v V (G ) ,是边 e E (G ) 的端点,则称 v 与 e 相关联, 与顶点 v 关联的边数之和称为该顶点的次数,记为 d (v ) 。
A的n次方矩阵中i行j列元素表示从结点i到结点j的长度为n的路 径条数。
数学建模-图论
二、图的矩阵表示
2 有向图的权矩阵A = (aij ) n×n (n为结点数)
a ij F v i v j , 0, , viv j E i j viv j E
例2:写出右图的权矩阵: 解:
1, v i , v j E a ij 0, v i , v j E
例1:写出右图的邻接矩阵(有向): 解:
0 0 A 1 1 1 0 0 0 0 1 0 1 1 0 1 0
数学建模-图论
二、图的矩阵表示
无向图的邻接矩阵 A = (aij )n×n (n为结点数)
a ij 1, ( v i v j ) E 0, ( v iv j ) E
例1:写出右图底图的邻接矩阵: 解:
0 1 A 1 1 1 0 1 0 1 1 0 1 1 0 1 0
19269-数学建模-9图论
如果 l(v) > l(ui) + w(uiv),则 z(v) = ui,否则 z(v) 不变。
第四步 计算 值的顶点,置
mSvi+iSni 1{l=(vS)i},{u并i+1用},uii+=1
记达到最小 i+1,转第
二步。
算法终止后,u0 到 v 的距离由 l(v) 的终值 给出,从 v 的父节点标号 z(v) 追溯到 u0,就得 到 u0 到 v 的最短路的路线。
vj 的边;G是从 E(G) 到V(G)V(G) 的一个映射,
它指定 E(G) 中的每条边与 V(G) 中的点组成的 无序点对相对应。
若用小圆点表示点集 V(G) 中的点,连线表 示边集 E(G) 中的边,则可用图形将图表示出来, 称之为图的图形。我们常用图的图形代表图本 身。
例1 : 设 V = {v1, v2, v3, v4},E = {e1, e2, e3,
l(v4) = min{, 2+5} = 7,
l(v5) = min{, 2+5} = 7。
在此次迭代中,v2 的标号不变,v3,v4,v5 的标号
被 v6 更新,故 v2 的父节点不变,v3,v4,v5 的父节点
为 v6,即 z(v2) = v1,z(v3) = z(v4) = z(v5) = v6。
引例 旅行商问题
一名推销员准备前往若干城市推销产品。 如何为他(她)设计一条最短的旅行路线(从 驻地出发,经过每个城市恰好一次,最后返回 驻地)?这一问题的研究历史十分悠久,通常 称之为旅行商问题。
引例 指派问题
一家公司经理准备安排名员工去完成项任 务,每人一项。由于各员工的特点不同,不同 的员工去完成同一项任务时所获得的回报是不 同的。如何分配工作方案可以使总回报最大?
数学建模之图论模型讲解
过河问题:摆渡人Ferryman,狼wolf,羊sheep,卷 心菜cabbage过河问题 . 如何摆渡使得它们不能互 相伤害.
考试安排问题:学校期末考试安排n门课的考 试时间时,不能把同一位学生选修的两门课安排在 同一时间考试,问学校考试最少要进行多长时间?
信道分配问题:发射台所用频率从小到大编号 为1,2, …称为信道。用同一信道的两个台站相距得 少于一个常数d,问各台至少需同时使用几个不同 的信道?
A—R,A—C,A—T,
R—P,P—S,S—T,
T—B,B—D,D—C,
A
R—S,R—B,P—D,
S—C,S—D.
T
每种药品作为一个顶 点,不能放在一起的 S 连边。相邻顶点用不 同颜色着色。
R P
这一问题就是图论中的顶点着色问题。
至少需用3个房间:A,S,B/D,T,R/C,P
B C
D
例3 最短路问题(SPP-shortest path problem) 一名司机奉命在最短的时间内将一车货物从甲
问题变成了:能否从这个图上任一顶点出发,
经过每条边一次且仅一次而回到出发顶点。
--Euler-回路(圈)问题。
A
A
B
D
B
D
C
C
例2 药品存储问题
▪ 有8种化学药品A、B、C、D、P、R、S和T要放 进贮藏室保管,出于安全原因,下列各组药品不能 贮在同一室内:A—R,A—C,A—T,R—P, P—S,S—T,T—B,B—D,D—C,R—S, R—B,P—D,S—C,S—D,试为这8种药品设 计一个使用房间数最少的贮藏方案。
G[{v1,v2,v3}] G[{e3,e4,e5,e6}]
3) 若 V V,且 V ,以 V 为顶点集,以两端点 均在V 中的边的全体为边集的图 G 的子图,称 为G的由V 导出的子图,记为 G[V ] .
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§1 最小生成树1.1 生成树的概念设图G=(V,E)是一个连通图,当从图中任一顶点出发遍历图G时,将边集E(G)分成两个集合A(G)和B(G)。
其中A(G)是遍历图时所经过的边的集合,B(G)是遍历图时未经过的边的集合。
显然,G1=(V,A)是图G的子图,则称子图G1是连通图G的生成树。
图的生成树不是惟一的。
如对图1(a),当按深度和广度优先搜索法进行遍历就可以得到图1中(b)和(c)的两棵不同的生成树,并分别称之为深度优先生成树和广度优先生成树。
对于有n个顶点的连通图,至少有n-1条边,而生成树中恰好有n-1条边,所以连通图的生成树是该图的极小连通子图。
若图G的生成树中任意加一条边属于边集B(G)中的边,则必然形成回路。
求解生成树在许多领域有实际意义。
例如,对于供电线路或煤气管道的铺设问题,即假设要把n个城市联成一个供电或煤气管道网络,则需要铺设n-1条线路。
任意两城市间可铺设一条线路,n个城市间最多可能铺设n(n-1)/2条线路,各条线路的造价一般是不同的。
一个很实际的问题就是如何在这些可能的线路中选择n-1条使该网络的建造费用最少,这就是下面要讨论的最小生成树问题。
1.2 网的最小生成树在前面我们已经给出图的生成树的概念。
这里来讨论生成树的应用。
假设,要在n个居民点之间敷设煤气管道。
由于,在每一个居民点与其余n-1个居民点之间都可能敷设煤气管道。
因此,在n个居民点之间,最多可能敷设n(n-1)/2条煤气管道。
然而,连通n个居民点之间的管道网络,最少需要n-1条管道。
也就是说,只需要n-1条管道线路就可以把n个居民点间的煤气管道连通。
另外,还需进一步考虑敷设每一条管道要付出的经济代价。
这就提出了一个优选问题。
即如何在n(n-1)/2条可能的线路中优选n-1条线路,构成一个煤气管道网络,从而既能连通n个居民点,又能使总的花费代价最小。
解决上述问题的数学模型就是求图中网的最小生成树问题。
把居民点看作图的顶点,把居民点之间的煤气管道看作边,而把敷设各条线路的代价当作权赋给相应的边。
这样,便构成一个带权的图,即网。
对于一个有n个顶点的网可以生成许多互不相同的生成树,每一棵生成树都是一个可行的敷设方案。
现在的问题是应寻求一棵所有边的权总和为最小的生成树。
如何构造这种网的最小生成树呢?下面给出这样一种解法:(1)已知一个网,将网中的边按其权值由小到大的次序顺序选取。
(2)若选某边后不形成回路,则将其保留作为树的一条边;若选某边后形成回路,则将其舍弃,以后也不再考虑。
(3)如此依次进行,直到选够(n-1)条边即得到最小生成树。
现以图2为例说明此算法。
设此图是用边集数组EV表示的,且数组中各边是按权值由小到大的次序排列,如下表所示。
按权值由小到大选取各边就是在数组中按下标k由1到en(图中边数)的次序选取。
选前2条边(2,3),(2,4)时均无问题,保留作为树的边;到第3条边(4,3)时将与已保留的边形成回路,将其舍去;同样继续做:保留(2,6);舍去(6,4);保留(5,7),(1,5),(1,6),此时,保留的边数已够(n-1)=6条边,此时必定将7个顶点全部互相连通了,后面剩下的边(1,2),(5,6)就不必再考虑了。
最后得到的最小生成树如图2a中深色边所示,其各边权值总和等于80。
由离散数学中的图论可以证明,这就是最小生成树了,其权值最小。
当图中有权值相等的边时,其最小生成树可能有不同的选取方案。
实现此算法的关键是,在选取某条边时应判断是否与已保留的边形成回路。
这可用将各顶点划分为集合的办法解决:假设数组tag(1..en)作为顶点集合划分的标志初值为0。
在算法的执行过程中,当所选顶点u,v是连通的,则将相应位置的tag[u],tag[v]置以相同的数字,而不连通的点在初期分属不同的集合,置不同的数字;一旦两个不同的连通分支连通了,则修改tag的值,将新的连通分支改为相同的数字。
我们以图2为例。
首先选(2,3)(2,4)边,由于是连通的,并且不出现回路。
tag[2]:=1,tag[3]:=tag[4]:=1是同一个集合A;选(6,2)边与A集合连通;tag[6]:=1;再选(5,7)与集合A不连通,tag[5]:=tag[7]:=2构成另一集合B;选(1,5)边与集合B连通,tag [1]:=2;此时,集合A={2,3,4,6};集合B={5,7,1};当选(1,6)边时,(1,6)与集合A、集合B都连通,并且两个顶点分别属于两个不同的集合A、B,这使得集合A与集合B通过边(1,6)连通。
修改集合B中tag的值,置为1,即将集合B并入集合A。
边为n-1条,这就是一棵最小生成树。
根据集合标志数组tag的变化过程,很容易判断,选择一条新的边是否构成回路。
当新选边的两个顶点u、v,若tag[u]和tag[v]相同并且均不等于0时,即u,v已在生成树集合中被保留过,加入u,v后即形成回路,不能选。
而当tag [u]<>tag[v]或者tag[u]=tag[v]=0时,可以选并且不形成回路,说明u,v中至少有一个顶点未被选过或者被选过的u、v分别属于两个不同的集合,此时选择u,v可以将含u的集合与含v的集合连通,修改tag数组。
如此下去,到所有顶点均已属于一个集合时,此最小生成树就完全构成了。
网的最小生成树算法描述如下:假设算法中用到的数据结构是经过处理的。
COST(1..n,1..n)是带权数组存放网中顶点之间的权。
EV(1..n*(n-1/2))按权从小到大存放排序后的顶点对,即EV[K].P1存放一个顶点,边的另一顶点存放在EV[K].P2之中。
tag(1..n):顶点集合划分标志的数组。
Enumb:当前生成树的边数。
SM:当前权累计和。
PROC minspanningtree(VAR cost;VAR ev);Var tag;BEGINCALL INITIAL(tag);Enumb:=0;SM:=0; {诸参量初始化}k:=1; {边数累计}WHILE (Enumb<=n-1) AND (k<=n) DOBegin U:=EV[k].P1;V:=EV[k].P2; {选一对顶点(U,V)}CALL FIND(U,T); {找到含顶点U的集合T}CALL FIND(V,W); {找到含顶点V的集合W}IF (T<>W) THENBeginwrite(u,v);Enumb:=Enumb+1; {最小生成树增加一条边}SM:=SM+COST[u,v];MERGE(T,W);{选u,v不会形成环,合并T,W集合,并修改tag}endK:=K+1; {找下一条边}endIF Enumb<n-1 THEN write('There is not a minspanning tree')ELSE write(SM)END;由算法可知图2的最小生成树的结果是(2,3),(2,4),(2,6),(5,7),(1,5),(1,6)。
§2 最短路径在一个赋权有向图上寻找最短路径问题也是图应用的一个重要课题。
假定图3中的有向图G=(V,E)是一个航空图,V的每一顶点表示—个城市,正中的每条弧v—>w表示从城市v到城市W的航线,弧V—>w上的标号代表从V城飞到w城所需要的时间。
要寻找由该航空图上一给定城市到另一城市所需要的最短飞行时间。
可以用求解这个有向图的单源最短路径算法来完成。
下面,我们讨论求解单源最短路径问题的贪心算法,也称Dijkstra算法。
设有向图G=(V,E),其中,V={1,2,…,n).cost是表示G的邻接矩阵,cost[i,j]表示有向边(i,j)的权。
若不存在有向边(i,j),则cost[i,j]的权为无限大(oo)。
令S是一个集合,其中的每个元素表示一个顶点,从源点到这些顶点的最短距离已经求出。
(1)令顶点V0为源点,集合S的初态只包含顶点V0,即S={V0}。
数组dist记录从源点到其他各顶点当前的最短距离,其初值为dist[i]:=cost[v0,i],(i=2,…,n)。
(2)从S之外的顶点集合V-S中选出一个顶点W,使dist[W]的值最小。
于是,从源点到达W只通过S 中的顶点,我们把W加入集合S。
(3)调整dist中记录的从源点到V-S中每个顶点V的距离:从原来的dist[v]和dist[w]+cost[w,v]中选择较小的值作为新的dist[v]。
(4)重复上述过程(2)和(3),直到S中包含V的全部顶点。
最终数组dist记录了从源点到V中其余各顶点的最短路径。
对图3所示的加权有向图应用Dijkstra算法,从源点V2出发到达各顶点的最短路径如下表所示。
最短路径---------------------------------------源点中间顶点终止顶点长度2 5 103 153 4 303 1 356 oo--------------------------------------对图3的执行过程:初始时,S={2},dist[1]=oo,dist[3]=15,dist[4]=oo,dist[5]=10,dist[6]=oo,第一遍处理时,W=2使dist[5]最小、于是把5加入S。
然后,调整dist中从源点到其余各顶点的距离:dist[3]=15,为次小,将3加入S。
dist[4]=cost[2,3]+cost[3,4]=15+15=30,经中间点3。
S={2,5,3,4},同理,dist[1]=cost[2,3]+cost[3,1]=35,S={2,5,3,4,1},由于2没有一条到6的路径,所以dist[6]=oo。
由此我们给出最短路径算法如下PROC shortpath(VAR cost;VAR dist;VAR path;VAR S,V0);BEGINFOR W:=1 TO n DOBegin dist[W]:=cost[V0,W];{最短路径初始化值}IF cost[V0,W]<maxTHEN path[W]:=V0;{path记载当前最短路径}End;S:=[V0];Vnum:=1;{到达点集合S和到达点S个数初值}WHILE (Vnum<n-1) DO {最后一点已无选择余地}Begin Wm:=max;u:=V0;FOR W:=1 TO n DOIF(NOT W IN S) AND (dist[W]<Wm)THEN Begin U:=W;Wm:=dist[w] End;{找最小dist[w]}S:=S+[U];Vnum:=Vnum+1; {U为找到最短路径的终点}FOR W:=1 TO n DOIF (NOT W IN S) AND (dist[U]+cost[U,W]<dist[W])THEN Begin dist[W]:=dist[U]+cost[U,W]; {调整非S集各点最短路径值}path[W]:=U;{调整非S集各点最短路径}End;Vnum:=Vnum+1End;END;PROC PRINTPATH(VAR dist VAR path;VAR S;V0)BEGINFOR i:=1 TO n DOIF(i IN S)THEN Begin k:=i;WHILE (k<>V0) DOBegin write(k);k:=path[k] End; {通过找前趋点,反向输出最短路径}write(k);writeln(dist[i])End;ELSE Begin write(i,V0);writeln('max') End;END;容易看出,算法short path的时间复杂度为O(n2),空间复杂度为O(n)。