图论课件--最小生成树-课件·PPT
数学建模-图论

图论导引
问题3:四色猜想 地图或地球仪上,最多用四种颜色就可把每一 国的版图染好,使得国界线两侧异色。
电子计算机问世以后,由于演算速度迅速提高,加 之人机对话的出现,大大加快了对四色猜想证明的进 程。美国伊利诺大学哈肯在1970年着手改进“放电过 程”,后与阿佩尔合作编制一个很好的程序。就在 1976年6月,他们在美国伊利诺斯大学的两台不同的电 子计算机上,用了1200个小时,作了100亿判断,终于 完成了四色定理的证明,轰动了世界。
有向图:
1, 若vi是ei的始点 aij 1, 若vi是ei的终点 0, 若v 与e 不关联 i i
无向图:
1, 若vi与v j 关联 aij 0, 若vi与v j 不关联
图的矩阵表示
例6:写出右图与其基本图 的关联矩阵 解:分别为:
图论的基本概念
几个基本定理:
1、对图G V,E ,有 d v 2 E .
vV
2、度为奇数的顶点有偶数个。
3、设G V,E 是有向图, 则 d v d v E .
vV vV
子图
定义 设图 G=(V,E, ),G1=(V1,E1, 1 )
(3)设 E1 E,且 E1 ,以 E1 为边集,E1 的端点集为顶点集的图 G 的子图, 称为 G 的由 E1 导出的子图,记为 G[E1].
G
G[{v1,v4,v5}]
G[{e1,e2,e3}]
基 本 概 念
定义1 在无向图 G=(V,E)中: (1) 顶点与边相互交错的有限非空序列 w (v0 e1v1e2 vk 1ek vk ) 称为一条从 v 0 到 v k 的通路,记为 Wv0vk (2)边不重复但顶点可重复的通路称为道路,记为 Tv0vk (3)边与顶点均不重复的通路称为路径,记为 Pv 0 v k 始点和终点相同的路称为圈或回路.
图最小生成树

是按逐个将顶点连通的方式来构造最
小生成树的。
10
从连通网络 N = { V, E }中的某一顶点 u0 出 发,选择与它关联的具有最小权值的边( u0, v), 将其顶点加入到生成树的顶点集合U中。 以后每一步从一个顶点在 U 中,而另一个顶点不 在U中的各条边中选择权值最小的边(u, v),把该 边加入到生成树的边集TE中,把它的顶点加入到 集合 U 中。如此重复执行,直到网络中的所有顶 点都加入到生成树顶点集合U中为止。
for (i=0; i<G.vexnum; ++i)
// 建零入度顶点栈S
if (!indegree[i]) Push(S, i); // 入度为0者进栈 count = 0; // 对输出顶点计数
while (!StackEmpty(S)) { Pop(S, i); printf(i, G.vertices[i].data); ++count; // 输出i号顶点并计数 for (p=G.vertices[i].firstarc; p; p=p->nextarc) { k = p->adjvex; // 对i号顶点的每个邻接点的入度减1
23
由于AOV网中有些活动之间没有次序要求,它们在拓扑序列的 位置可以是任意的,因此拓扑排序的结果不唯一。
C1 C3 C4
对右图进行拓扑排序,可得一个拓扑序列: C1,C3,C2,C4,C7,C6,C5 也可得到另一个拓扑序列: C2,C7,C1,C3,C4,C5,C6
C7 C2
C6 C5
还可以得到其它的拓扑序列。学生按照任何一个拓扑序列都可 以完成所要求的全部课程学习。 在AOV网中不应该出现有向环。因为环的存在意味着某项活动 将以自己为先决条件,显然无法形成拓扑序列。 判定网中是否存在环的方法:对有向图构造其顶点的拓扑有序 序列,若网中所有顶点都出现在它的拓扑有序序列中,则该 AOV网中一定不存在环。
图的最小生成树

保证不形成回路
(2)TE=TE+(u0,v0), 边(u0,v0)并入TE (3)U=U+{v0},顶点V0 并入U
特点: 以连通为主、选代价最小的邻接边
说明:Prim算法的起始点(可不写,默认为0)
翻译训练1.学生结合课下注释和工具书自行疏通文义,并画出不解之处。【教学提示】节奏划分与明确文意相辅相成,若能以节奏划分引导学生明确文意最好;若学生理解有限,亦可在解读文意后把握节
奏划分。2.以四人小组为单位,组内互助解疑,并尝试用“直译”与“意译”两种方法译读文章。3.教师选择疑难句或值得翻译的句子,请学生用两种翻译方法进行翻译。翻译示例:若夫日出而林霏开,
【练习】请用kruskal算法找出下图最小生成树。
练习
利用克鲁斯卡尔算法构造最小生成树 算出该最小生成树的代价
最
1
10
小
生
成
21 6
树 19
算
法
33
思
想
5
18
二
1
10
6 Prim算法
2
11
5
6
3
14 6
4
2
11
5
6
3
初始条件
点集合={u0}, TE={φ}。
5
18
4
普里姆(Prim)最小生成树算法
1
③
④
3
42
⑤
6
利用Prim演算法找最小生成树
以A点为起始点
L :A D B C E F T : h c d e a
信息学奥赛一本通 第4章 第6节 最小生成树(C++版) ppt课件

5
71
4
min[3]=w[2][3]=1; min[5]=w[2][5]=2;
第三次循环是找到min[3]最小的蓝点3。将3变为白点,接着枚举与3相连的所有 蓝点4、5,修改它们与白点相连的最小边权。
1
2 4
22 16
5
3
7
1
4
min[4]=w[3][4]=1; 由于min[5]=2 < w[3][5]=6;所 以不修改min[5]的值。
2
1
2
12
8
10
9
5
6
3
1个集合{ {1,2,3,4,5} } 生成树中有4条边{ <1,2> ,<4,5>,<3,5>,<2,5>}
3
74
ppt课件
16
Kruskal算法
算法结束,最小生成树权值为19。 通过上面的模拟能够看到,Kruskal算法每次都选择一条最小的,且能合并两 个不同集合的边,一张n个点的图总共选取n-1次边。因为每次我们选的都是最小的 边,所以最后的生成树一定是最小生成树。每次我们选的边都能够合并两个集合, 最后n个点一定会合并成一个集合。通过这样的贪心策略,Kruskal算法就能得到一 棵有n-1条边,连接着n个点的最小生成树。 Kruskal算法的时间复杂度为O(E*logE),E为边数。
第一行: 农场的个数,N(3<=N<=100)。
第二行..结 尾
后来的行包含了一个N*N的矩阵,表示每个农场之间的距离。理论 上,他们是N行,每行由N个用空格分隔的数组成,实际上,他们 限制在80个字符,因此,某些行会紧接着另一些行。当然,对角 线将会是0,因为不会有线路从第i个农场到它本身。
图论课件第二章_树

图论及其应用
应用数学学院
1
第二章 树
本章主要内容
一、树的概念与性质
二、生成树
三、最小生成树
2
本次课主要内容
(一)、树的概念与应用 (二)、树的性质 (三)、树的中心与形心
16
2 m ( G ) d ( v ) k 1 kn 2 ( k ) 2 n 1 2 n 2
v V ( G )
所以,有:m (G)>n-1,与G是树矛盾! 例10 设G是森林且恰有2k个奇数顶点,则在G中有k条 边不重合的路P1, P2 ,…, Pk,使得:
v2 e2 e5 v1 v4 e4 e3 e6 v3
e1
7
该问题归结于在图中求所谓的最小生成树问题。或 称为赋权图中的最小连接问题。 例4 化学中的分子结构与树 例如:C4H10的两种同分异构结构图模型为: h h h h h h h h h h h h h h
h h h
h
h
h
8
例5 电网络中独立回路与图的生成树 早在19世纪,图论还没有引起人们关注的时候,物理学 家克希荷夫就已经注意到电路中的独立回路与该电路中的所 谓生成树的关系。即:如果电路是(n, m)图,则独立回路的 个数为m-n+1.并且,生成树添上生成树外的G的一条边,就 可以得到一独立回路。 例6 通信网络中的组播树 在单播模型中,数据包通过网络沿着单一路径从源主机向 目标主机传递,但在组播模型中,组播源向某一组地址传递数 据包,而这一地址却代表一个主机组。为了向所有接收者传 递数据,一般采用组播分布树描述IP组播在网络里经过的路 径。组播分布树有四种基本类型:泛洪法、有源树、有核树 和Steiner树 。
最小生成树问题(共7张PPT)

个,所以支撑树是有不唯一]。
C n1 m
求最小树的Kruskal算法
赋权的连通图G=(V,E)中m=|E|,n=|V|,
S1:对E中各边的权排序,设 w1≤w2≤…≤wm,wi=w(ei)
S2:初始化: w←0,T←φ,k←1,t←0
S3:若t=n-1则转S6,否则转S4
Y
N
T’←T∪{ek}
T’成圈? N END
Y
T←T+ {ek},
k←k+1 w←w+wk,
t←t+1,k←k+1
用Kruskal算法求最小树
用Kruskal算法(避圈法)求赋权连通图G的最小树
V2
5
V6
Kruskal法盯住边,而Prim法更注意顶点:
T为最小树,w为T的权。
4
T={v1,v2,v3,v5}
Prim法求最小支撑树 E的权排序w1≤w2≤…≤wm w←0,T←φ,k←1,t←0
对要m让条程边序的读边懂长“图排”,序S程3,:序m如个何元判素断排是序否较成好“的圈算”?法谈是何基容于易分,治时策间略、的空快间速复排杂序性(Q绝u不ick应S小or看ting),其时间复杂性是O(m㏒m)。
min S2:初始化:w←0,T←φ,k←1,t←0 设: {w(vv )}w(vv ) 简对称m条最边小的树边或长最排短序树,[管vvm线ij个 铺ST 元设素]。排序较好的i算法j是基于分治策略的快l速排k序(Quick Sorting),其时间复杂性是O(m㏒m)。
S4:若T∪{ek}有圈则k←k+1转S4,否则 转S5
S5: T←T∪{ek},w←w+wk, t←t+1, k←k+1,转S3
最小生成树
如此进行下去,每次往生成树里并入一 个顶点和一条边,直到n-1次后,把所有 n 个顶点都并入生成树T的顶点集U中, 此时U=V,TE中包含有(n-1)条边;
图
图6.10 图G 及其生成树
无向连通图 G 图
➢ 生成树
图6.10 图G 及其生成树
生成树
➢ 最小生成树
图
1.1 普里姆(prim)算法
假设G=(V,E)是一个具有n 个顶点的连通网络, T=(U,TE)是G的最小生成树,其中U是T的顶点 集,TE是T的边集,U和TE的初值均为空。
算法开始时,首先从V中任取一个顶点(假定 为V1),将此顶点并入U中,此时最小生成树 顶点集U={V1};
这样,T就是最后得到的最小生成树。
普里姆算法中每次选取的边两端,总是 一个已连通顶点(在U集合内)和一个未 连通顶点(在U集合外),故这个边选取 后一定能将未连通顶点连通而又保证不 会形成环路。
图
图6.11 普里姆算法例子
图
为了便于在顶点集合U和V-U之间选择权 最小的边,建立两个数组closest和 lowcost,closest[i]表示U中的一个顶点,该 顶点与V-U中的一个顶点构成的边具有最 小的权;lowcost表示该边对应的权值。
姆
{
算
min=lowcost[j];
法
k=j;
续
} printf(“(%d,%d)”,k,closest[j]);
/* 打印生成树的一条边*/
《最小生成树》PPT课件_OK
(2,5) 添加
{1,3},{4, 6},{2,5}
(3,6) 添加
{1,3,4, 6},{2,5}
(1,4) 放弃
因构成回路
(3,4) 放弃
因构成回路
(2,3) 添加
{1,3,4,5,6,2}
9
算法难点及解决方案
• 如何从所有边中选择代价最小的边:
– 用一个优先级队列来实现。将所有的边放入一个优先级 队列,边的优先级就是它的权值。权值越小,优先级越 高。
数据结构 Data Structure 第十三章 最小生成树
1
第13章 最小生成树
• 生成树与最小生成树 • Kruskal算法 • Prim算法 • 算法的正确性
2
生成树
• 生成树是无向连通图的极小连通子图。包含图的 所有 n 个结点,但只含图的 n-1 条边。在生成树 中添加一条边之后,必定会形成回路或环。
23
定理的证明
• 用反证法证明。 • 假定在图G = {V,E } 中,存在一棵不包括代价
• 在一个连通图中,一般边数总比结点数大,所以, Kruskal算法的时间复杂度是O(E|log|E|)。
14
第13章 最小生成树
• 生成树与最小生成树 • Kruskal算法 • Prim算法 • 算法的正确性
15
Prim算法
• 从顶点的角度出发。初始时,顶点集U为空,然 后逐个加入顶点,直到包含所有顶点。
• 如何判断加入一条边后会不会形成回路:
– 用并查集来实现。将一个连通分量表示为并查集中的一 个子集,检查一条边加入后会不会形成回路可以通过对 边的两个端点分别执行Find操作。如果两个Find的结果相 同,则表示两个端点已连通,加入这条边会形成回路, 否则将这条边加入生成树。添加边的操作就是一个Union 操作,将两个端点所属的子集归并起来,表示其中的所 有顶点都已连通。
最小生成树(普里姆算法)
最⼩⽣成树(普⾥姆算法):所谓⽣成树,就是n个点之间连成n-1条边的图形。
⽽最⼩⽣成树,就是权值(两点间直线的值)之和的最⼩值。
⾸先,要⽤⼆维数组记录点和权值。
如上图所⽰⽆向图:int map[7][7];map[1][2]=map[2][1]=4;map[1][3]=map[3][1]=2;......然后再求最⼩⽣成树。
具体⽅法是:1.先选取⼀个点作起始点,然后选择它邻近的权值最⼩的点(如果有多个与其相连的相同最⼩权值的点,随便选取⼀个)。
如1作为起点。
visited[1]=1;pos=1;//⽤low[]数组不断刷新最⼩权值,low[i](0<i<=点数)的值为:i点到邻近点(未被标记)的最⼩距离。
low[1]=0; //起始点i到邻近点的最⼩距离为0low[2]=map[pos][2]=4;low[3]=map[pos][3]=2;low[4]==map[pos][4]=3;low[5]=map[pos][5]=MaxInt; //⽆法直达low[6]=map[pos][6]=MaxInt;2.再在伸延的点找与它邻近的两者权值最⼩的点。
//low[]以3作当前位置进⾏更新visited[3]=1;pos=3;low[1]=0; //已标记,不更新low[2]=map[1][2]=4; //⽐5⼩,不更新low[3]=2; //已标记,不更新low[4]=map[1][4]=3; //⽐1⼤,更新后为:low[4]=map[3][4]=1;low[5]=map[1][5]=MaxInt;//⽆法直达,不更新low[6]=map[1][6]=MaxInt;//⽐2⼤,更新后为:low[6]=map[3][6]=2;3.如此类推...当所有点都连同后,结果最⽣成树如上图所⽰。
所有权值相加就是最⼩⽣成树,其值为2+1+2+4+3=12。
⾄于具体代码如何实现,现在结合POJ1258例题解释。
最小生成树
对于图G=(V,E)的每一条e∈E, 赋予相应的权数 f(e),得到一个网络图,记为N=(V,E,F),
设T=(为T的权,N中权数最小的 生成树称为N的最小生成树。 许多实际问题,如在若干个城市之间建造铁路网、 输电网或通信网等,都可归纳为寻求连通赋权图 的最小生成树问题。 下面介绍两种求最小生成树的方法:
例1 求下图所示的最小生成树。
v2 e1 v1 e2 e6 v4 e 7 v3
v5
解:按各边的权的不减次序为:
e1 e 2 e3 e7 e6 e 4 e5 e8
所以,首先取 e1 , e2 ,尔后再取 e7 和 e6 , 则构成最小生成树 .
二、破圈法 破圈法就是在图中任取一个圈,从圈中去 掉权最大的边,将这个圈破掉。重复这个 过程,直到图中没有圈为止,保留下的边 组成的图即为最小生成树。 例2 同例1。 解:在圈v2v2v3中,去掉权最大的边e2或e3; 在圈v2v3v4中,去掉权最大的边e4; 在圈v3v4v5中,去掉权最大的边e5; 在圈中v2v3v5,去掉权最大的边e8;
在剩下的图中,已没有圈,于是得到最小生成树, 如下图:
v2 e1 v1 e2 e6 v4 v3 e7
v5
例3 求下图的最小生成树。
C1 1 B1 3 5 A 4 B2 6 5 8 7 6 C4 C3 3 3 4 D3 8 3 C2 8 D2 4 E A
4 3 B2 C4 4 D3 C3 3
B 2 A 3 5 J 2 2 H 5 G 1 F 2 1 S 3 1 4 C 3 4 1 4 E
5
D 2
A 2
B
1
C D 1 2 E
1 S 2 H