- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(2) {V1 ,V3 ,V6 } { V2 ,V4 , V5 }
8
最小代价生成树
普里姆算法求最小生成树:从 生成树中只有一个顶点开始, 到顶点全部进入生成树为止
V1
1 V4
V3
42V6V165V2 5 V3
6
V5
6
5
V4
2 V6
步骤 U
V-U
(0) {V1 } { V2 ,V3 ,V4 , V5 ,V6 }
假设N=(V,E)是连通网,TE是N上最小生成树中边的集合。 算法从U={u0}(u0∈V),TE={}开始,重复执行下述操作:
在所有u∈U,v∈V-U的边(u,v)中找一条代价最小的边(u0 ,v0),将 其并入集合TE,同时将v0并入U集合。
当U=V则结束,此时TE中必有n-1条边,则T=(V,{TE})为N的最小生 成树。
(4) {V1 ,V3 ,V6 ,V4 ,V2 } { V5 }
(5) {V1 ,V3 ,V6 ,V4 ,V2 ,V5 } { }
6
最小代价生成树
V1
1
普里姆算法求最小生成树:从
V3
生成树中只有一个顶点开始,
到顶点全部进入生成树为止
V1
6
5
1
V2
V4
V3
V5
V6
步骤 (0) (1)
U
V-U
{V1 } { V2 ,V3 ,V4 , V5 ,V6 } {V1 ,V3 } { V2 ,V4 , V5 ,V6 }
例如 下图的输出为
v1
6
5
v2
1 v4
55
v3
3 6
42
v5 6 v6
weight:15 (v1, v3) (v3, v6) (v6, v4) (v3, v2) (v2, v5) 或者(1, 3) (3, 6) (6, 4) (3, 2) (2, 5)
普里姆算法构造最小生成树的过程是从一个顶点U={u0}作初 态,不断寻找与U中顶点相邻且代价最小的边的另一个顶点, 扩充到U集合直至U=V为止。
5
最小代价生成树
普里姆算法求最小生成树:从 生成树中只有一个顶点开始, 到顶点全部进入生成树为止
V1
1
V2 5
V4
V3
3
4
2
V5
V6
6 V2 5
V1 5
(4) {V1 ,V3 ,V6 ,V4 ,V2 } { V5 }
(5) {V1 ,V3 ,V6 ,V4 ,V2 ,V5 } { } 11
最小代价生成树
普里姆算法求最小生成树:从生 成树中只有一个顶点开始,到顶 点全部进入生成树为止
V1
1
V2 5
V4
V3
3
4
2
V5
V6
V1
V2 V3
步骤 U
V-U
V4
(1) {V1 ,V3 } { V2 ,V4 , V5 ,V6 }
(2) {V1 ,V3 ,V6 } { V2 ,V4 , V5 }
(3) {V1 ,V3 ,V6 ,V4 } { V2, V5 }
9
最小代价生成树
普里姆算法求最小生成树:从 生成树中只有一个顶点开始, 到顶点全部进入生成树为止
V1
1
V2 5
V4
V3
4
2
V6
V1 6
V2 5 V3
6
V5
6
V4 V6
步骤 U
V-U
(0) {V1 } { V2 ,V3 ,V4 , V5 ,V6 }
(1) {V1 ,V3 } { V2 ,V4 , V5 ,V6 }
(2) {V1 ,V3 ,V6 } { V2 ,V4 , V5 }
(3) {V1 ,V3 ,V6 ,V4 } { V2, V5 }
最小生成树算法
------prim& Kruskal
1
生成树的概念
生成树
➢ 一个连通图的生成树是一个极小连通子图,它含有图中全 部顶点,但只有足以构成一棵树的n-1条边。
➢ 生成树不唯一
V2
V2
V1
V4
V6 V5
V3 生成树
V1
V4
V6 V5
V2
V1
V4
V6 V5
V3
V2
V1
V4
V6 V5
V3
V3
普里姆(Prim)算法
开始
生成树中只放置一个顶点
生成树中顶点数小于n?否 是
在关联生成树顶点的边中(即边的 一个顶点在生成树中,另一个顶点不在) 取权值最小者
将选中的边加入生成树, 同时将该边的关联顶点加入生成树中
结束
13
基本要求
从键盘(或数据文件)输入图的信息,用普里姆算法求解给 定无向连通图的最小生成树,最后输出最小生成树中的权值 和所有的边,图的存储结构自行设定。
1
5
V4
V3
36
4
2
V5
6
V6
步骤 U
V-U
(0) {V1 } { V2 ,V3 ,V4 , V5 ,V6 }
(1) {V1 ,V3 } { V2 ,V4 , V5 ,V6 }
(2) {V1 ,V3 ,V6 } { V2 ,V4 , V5 }
(3) {V1 ,V3 ,V6 ,V4 } { V2, V5 }
(4) {V1 ,V3 ,V6 ,V4 ,V2 } { V5 }
10
最小代价生成树
普里姆算法求最小生成树:从生 成树中只有一个顶点开始,到顶 点全部进入生成树为止
V1
1
V2 5
V4
V3
3
4
2
V5
V6
V1
步骤 U
V-U
V2 V3
36
V5
6
V4 V6
(0) {V1 } { V2 ,V3 ,V4 , V5 ,V6 } (1) {V1 ,V3 } { V2 ,V4 , V5 ,V6 } (2) {V1 ,V3 ,V6 } { V2 ,V4 , V5 } (3) {V1 ,V3 ,V6 ,V4 } { V2, V5 }
2
最小代价生成树
生成树的代价等于其边上的权值之和。
6 V2 5
V1 5
1
5
V4
V3
36
4
2
V1
6
5
V5
6
V6
V1
1
1
V2
V4
V3
V2 5
V4
V3
6
4
3
4
2
V5
V6
V5
V6
3
最小代价生成树
两种常用的构造最小生成树的方法: ➢ 普里姆算法(prim) ➢ 克鲁斯卡尔算法( Kruskal)
4
普里姆(Prim)算法
(0)
{V1 } { V2 ,V3 ,V4 , V5 ,V6 }
(1) {V1 ,V3 } { V2 ,V4 , V5 ,V6 }
V5
V6
(2) {V1 ,V3 ,V6 } { V2 ,V4 , V5 } (3) {V1 ,V3 ,V6 ,V4 } { V2, V5 } (4) {V1 ,V3 ,V6 ,V4 ,V2 } { V5 } (5) {V1 ,V3 ,V6 ,V4 ,V2 ,V5 } { } 12
7
最小代价生成树
普里姆算法求最小生成树:从 生成树中只有一个顶点开始, 到顶点全部进入生成树为止
V1 1 V3
4 V6
V1
6
5
V2 5
5
V4
V3
6
4
V5
V6
步骤 U
V-U
(0) {V1 } { V2 ,V3 ,V4 , V5 ,V6 }
(1) {V1 ,V3 } { V2 ,V4 , V5 ,V6 }