Kruskal实现最小生成树
Kruskal实现最小生成树
算法原理:
一群孤立的顶点,在不形成环的情况下不断把最小的边连接起来。
如何描述不形成环?
1、书上的描述,把连接的顶点,标记为同一个连通分量,线段的起点ViV_iVi和VjV_jVj属于不同的连通分量即可,实现比较简单,只要一个标记数组就可以实现。
2、还有一种描述,不使用连通分量方式,检测回路,类似于ViV_iVi.parent !=VjV_jVj,目前思考还不成熟。
代码实现:
def kruskal2(graph):vnum = len(graph)pqueue = []for head in graph:for tail in graph[head].keys():heapq.heappush(pqueue,(graph[head][tail],head,tail))reps = {vertex:vertex for vertex in graph} mst = {vertex : None for vertex in graph}count = 0while count < vnum and pqueue:pair = heapq.heappop(pqueue)weight = pair[0]head = pair[1]tail = pair[2]if reps[head] == reps[tail]:continuemst[tail]=(head,weight)for v in graph:if reps[v] == reps[tail]:reps[v]=reps[head] count += 1return mst
输出结果:
#%%g = {'A':{'B':1,'C':2},'B':{'A':1,'C':3,'D':4},'C':{'A':2,'B':3,'D':5,'E':6},'D':{'B':4,'C':5,'E':7,'F':8},'E':{'C':6,'D':7,'G':9},'F':{'D':8},'G':{'E':9}}t=kruskal(g)print t m=kruskal2(g)print m {'A': None, 'C': ('A', 2), 'B': ('A', 1), 'E': ('C', 6), 'D': ('B', 4), 'G': ('E', 9), 'F': ('D', 8)}
{'A': None, 'C': ('A', 2), 'B': ('A', 1), 'E': ('C', 6), 'D': ('B', 4), 'G': ('E', 9), 'F': ('D', 8)}
Kruskal实现最小生成树相关推荐
- Kruskal求最小生成树
Kruskal算法最小生成树 #include <iostream> #include <cstdio> #include <cstring> #include & ...
- 【学习笔记】比较分别用prim和kruskal实现最小生成树和算法优化方案
kruskal: 1.思路 :设G=(V,E)是无向连通带权图,V={,-,n}:设最小生成树T=(V,TE),该树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),Kruskal算法将这n个 ...
- Prim和Kruskal求最小生成树
Prim: 算法步骤: 1.任意结点开始(不妨设为v1)构造最小生成树: 2.首先把这个结点(出发点)包括进生成树里, 3.然后在那些其一个端点已在生成树里.另一端点还未在生成树里的所有边中找出权最小 ...
- Kruskal算法 最小生成树
Kruskal算法 Kruskal的由来 Prim算法利用了MST的性质:假设N= (V,E)是一个连通图,U是顶点集V的一个非空子集,若(u,v)是一条最小权值的边,其中u属于U,v属于V-U,则必 ...
- 基于kruskal的最小生成树
生成树:一个联通图中还有n个顶点但却只有n-1条边 最小生成树:权值最小的生成树 kruskal算法:并查集思想 1.n个顶点 连接n-1个边 2.采用快排选出最小的边 模板代码: #define _ ...
- 22中超联赛day8 1007(hdu7226) Darnassus 并查集(按秩合并+路径压缩)+ 链式前向星桶排 + Kruskal求最小生成树
Darnassus 题目描述 Even the World Tree must bow to the cycle of life. Everything born will die. Archimon ...
- hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集
题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊 就是注意一点 输入边的信息时,角标 ...
- CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树
题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...
- 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)
一.基础知识 有向图 无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...
最新文章
- RESTful Web 服务 - 资源
- spring几种获取 HttpServletRequest 对象的方式
- 快速搞懂 SQL Server 的锁定和阻塞
- MySQL的四种不同查询的分析
- 无忧企业系统的getshell
- IOS9 微信sdk升级指南
- 电商商城系统活动设计
- 俯视排版类型海报|没思路?试试可临摹PSD分层模板设计吧!
- 虚拟货币公有链项目集体爆发,AE超过历史最高点
- Airflow任务调度延时问题分析和优化
- 斐波那契序列 Fibonacci
- 下午进行就业前的一次培训
- jQuery常用属性过滤选择器
- Python之类的构造(面向对象)
- 第 49 章 Lighttpd
- 苹果id无法登陆_苹果手机无法连接到app store怎么办
- RocketMq中MessageQueue的分配
- python处理excel文件合并问题
- HTTP协议——请求格式及方法
- 双塔模型DSSM及各种变体塔
热门文章
- java下拉菜单_Web前端和Java开发哪个薪资更高,发展前景更好?
- tftp刷路由器 linux,TP-Link无线路由器HTTP/TFTP后门漏洞
- python 生成数组1:1:20_英特尔“演化算法”新框架:29个Python代码块,自动生成新算法...
- iwrite提交不了作业_在云端,我们把花样作业pick起来!
- ASM ClassReader failed to parse class file
- 【spring boot】使用RestTemplate调用百度坐标转换服务
- linux CentOS 7 安装 java1.8 (tar.gz)
- java 禁用迅雷_Squid使用User Agent过滤禁止迅雷
- vue实现查询多条记录_sql:多表查询
- graphpad如何做x轴在上方的图_数据分析最有用的25个 Matplotlib图