千家信息网

Python中的Prim算法实例讲解

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"Python中的Prim算法实例讲解",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python中的Prim算法实例讲解"吧!最小生
千家信息网最后更新 2026年11月03日Python中的Prim算法实例讲解

这篇文章主要讲解了"Python中的Prim算法实例讲解",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Python中的Prim算法实例讲解"吧!

最小生成树的Prim算法也是贪心算法的一大经典应用。Prim算法的特点是时刻维护一棵树,算法不断加边,加的过程始终是一棵树。

Prim算法过程:
一条边一条边地加, 维护一棵树。

初始 E = {}空集合, V = {任选的一个起始节点}
循环(n - 1)次,每次选择一条边(v1,v2), 满足:v1属于V , v2不属于V。且(v1,v2)权值最小。
E = E + (v1,v2)
V = V + v2

最终E中的边是一棵最小生成树, V包含了全部节点。

以下图为例介绍Prim算法的执行过程。

Prim算法的过程从A开始 V = {A}, E = {}

选中边AF , V = {A, F}, E = {(A,F)}

选中边FB, V = {A, F, B}, E = {(A,F), (F,B)}

选中边BD, V = {A, B, F, D}, E = {(A,F), (F,B), (B,D)}

选中边DE, V = {A, B, F, D, E}, E = {(A,F), (F,B), (B,D), (D,E)}

选中边BC, V = {A, B, F, D, E, c}, E = {(A,F), (F,B), (B,D), (D,E), (B,C)}, 算法结束。

Prim算法的证明:假设Prim算法得到一棵树P,有一棵最小生成树T。假设P和T不同,我们假设Prim算法进行到第(K - 1)步时选择的边都在T中,这时Prim算法的树是P', 第K步时,Prim算法选择了一条边e = (u, v)不在T中。假设u在P'中,而v不在。

因为T是树,所以T中必然有一条u到v的路径,我们考虑这条路径上第一个点u在P'中,最后一个点v不在P'中,则路径上一定有一条边f = (x,y),x在P'中,而且y不在P'中。
我们考虑f和e的边权w(f)与w(e)的关系: 若w(f) > w(e),在T中用e换掉f (T中加上e去掉f),得到一个权值和更小的生成树,与T是最小生成树矛盾。
若w(f) < w(e), Prim算法在第K步时应该考虑加边f,而不是e,矛盾。

因此只有w(f) = w(e),我们在T中用e换掉f,这样Prim算法在前K步选择的边在T中了,有限步之后把T变成P,而树权值和不变, 从而Prim算法是正确的。
请仔细理解Prim算法--时刻维护一棵生成树。我们的证明构造性地证明了所有地最小生成树地边权(多重)集合都相同!

N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树。

最后,我们来提供输入输出数据,由你来写一段程序,实现这个算法,只有写出了正确的程序,才能继续后面的课程。

输入

第1行:2个数N,M中间用空格分隔,N为点的数量,M为边的数量。(2 <= N <= 1000, 1 <= M <= 50000)第2 - M + 1行:每行3个数S E W,分别表示M条边的2个顶点及权值。(1 <= S, E <= N,1 <= W <= 10000)

输出

输出最小生成树的所有边的权值之和。

输入示例

9 14
1 2 4
2 3 8
3 4 7
4 5 9
5 6 10
6 7 2
7 8 1
8 9 7
2 8 11
3 9 2
7 9 6
3 6 4
4 6 14
1 8 8

输出示例

37

maxv=10001n,m=list(map(int,input().split()))E=[]V=set([1])cost=[]for i in range(n+1):    a=[]    for j in range(n+1):        a.append(maxv)    cost.append(a)for i in range(m):    s,e,w=list(map(int,input().split()))    cost[s][e]=w    cost[e][s]=wcloset=[0]lowcost=[maxv]for i in range(1,n+1):    closet.append(1)    lowcost.append(cost[1][i])ans=0for i in range(n-1):    k=0    for j in range(2,n+1):        if (lowcost[j]!=0) and (lowcost[j]

感谢各位的阅读,以上就是"Python中的Prim算法实例讲解"的内容了,经过本文的学习后,相信大家对Python中的Prim算法实例讲解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

算法 生成 最小 实例 过程 一棵树 输出 选择 路径 学习 输入 矛盾 个数 中用 内容 只有 数量 时刻 示例 程序 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 新华互联网科技 广州紫鲸互联网科技有限公司 互联网属科技 盈实互联网科技 互联网最新的科技有限公司 狮子座互联网科技 中国互联网科技发展 安徽鑫晟辉互联网科技 花神(南京)互联网科技有限公司 迪庆互联网科技招生 广州新华互联网科技学校电竞方面 世界互联网领先科技成果获奖 山东星卡互联网科技有限公司官网 互联网企业科技类企业如何做账 富国互联网科技002692 上海同邻互联网科技有限公司规模 吉林省码上互联网科技电话 科技和互联网行业的特点 互联网科技品牌 上海旺乐尼互联网科技有限公司 互联网科技的 嘟嘟瓜互联网科技 上海致骋互联网科技 上海亿帐通互联网科技 北京三清互联网科技 互联网时代的科技公司 广州千川互联网科技有限公司 上海乐五互联网科技有限公司 世界互联网科技成果奖 广州全民伙伴互联网科技有限公司
0