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实现最小生成树相关推荐

  1. Kruskal求最小生成树

    Kruskal算法最小生成树 #include <iostream> #include <cstdio> #include <cstring> #include & ...

  2. 【学习笔记】比较分别用prim和kruskal实现最小生成树和算法优化方案

    kruskal: 1.思路 :设G=(V,E)是无向连通带权图,V={,-,n}:设最小生成树T=(V,TE),该树的初始状态为只有n个顶点而无边的非连通图T=(V,{}),Kruskal算法将这n个 ...

  3. Prim和Kruskal求最小生成树

    Prim: 算法步骤: 1.任意结点开始(不妨设为v1)构造最小生成树: 2.首先把这个结点(出发点)包括进生成树里, 3.然后在那些其一个端点已在生成树里.另一端点还未在生成树里的所有边中找出权最小 ...

  4. Kruskal算法 最小生成树

    Kruskal算法 Kruskal的由来 Prim算法利用了MST的性质:假设N= (V,E)是一个连通图,U是顶点集V的一个非空子集,若(u,v)是一条最小权值的边,其中u属于U,v属于V-U,则必 ...

  5. 基于kruskal的最小生成树

    生成树:一个联通图中还有n个顶点但却只有n-1条边 最小生成树:权值最小的生成树 kruskal算法:并查集思想 1.n个顶点 连接n-1个边 2.采用快排选出最小的边 模板代码: #define _ ...

  6. 22中超联赛day8 1007(hdu7226) Darnassus 并查集(按秩合并+路径压缩)+ 链式前向星桶排 + Kruskal求最小生成树

    Darnassus 题目描述 Even the World Tree must bow to the cycle of life. Everything born will die. Archimon ...

  7. hdu 1233 还是畅通工程 Kruskal 最小生成树 并查集

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1233 模板题,kruskal求最小生成树. 并查集是个好东西啊  就是注意一点 输入边的信息时,角标 ...

  8. CSP认证201412-4 最优灌溉[C++题解]:最小生成树裸题、Kruskal算法求最小生成树

    题目分析 来源:acwing 分析:这是一道最小生成树的裸题. 这里默写Kruskal求最小生成树的最小费用的模板. 最小生成树模板请参考笔者的另一篇博文: 最小生成树板子-AcWing 859. K ...

  9. 图论基础知识--最小生成树算法kruskal(克鲁斯克尔)和普里姆算法(Prim算法);最短路径算法Dijkstra(迪杰斯特拉)和Floyd(弗洛伊德)

    一.基础知识   有向图   无向图 以无向图为例: 邻接矩阵: 度矩阵(对角矩阵): 二.最小生成树 应用:将网络顶点看着城市,边看着城市之间通讯网,边的权重看着成本,根据最小生成树可以构建城市之间 ...

最新文章

  1. RESTful Web 服务 - 资源
  2. spring几种获取 HttpServletRequest 对象的方式
  3. 快速搞懂 SQL Server 的锁定和阻塞
  4. MySQL的四种不同查询的分析
  5. 无忧企业系统的getshell
  6. IOS9 微信sdk升级指南
  7. 电商商城系统活动设计
  8. 俯视排版类型海报|没思路?试试可临摹PSD分层模板设计吧!
  9. 虚拟货币公有链项目集体爆发,AE超过历史最高点
  10. Airflow任务调度延时问题分析和优化
  11. 斐波那契序列 Fibonacci
  12. 下午进行就业前的一次培训
  13. jQuery常用属性过滤选择器
  14. Python之类的构造(面向对象)
  15. 第 49 章 Lighttpd
  16. 苹果id无法登陆_苹果手机无法连接到app store怎么办
  17. RocketMq中MessageQueue的分配
  18. python处理excel文件合并问题
  19. HTTP协议——请求格式及方法
  20. 双塔模型DSSM及各种变体塔

热门文章

  1. java下拉菜单_Web前端和Java开发哪个薪资更高,发展前景更好?
  2. tftp刷路由器 linux,TP-Link无线路由器HTTP/TFTP后门漏洞
  3. python 生成数组1:1:20_英特尔“演化算法”新框架:29个Python代码块,自动生成新算法...
  4. iwrite提交不了作业_在云端,我们把花样作业pick起来!
  5. ASM ClassReader failed to parse class file
  6. 【spring boot】使用RestTemplate调用百度坐标转换服务
  7. linux CentOS 7 安装 java1.8 (tar.gz)
  8. java 禁用迅雷_Squid使用User Agent过滤禁止迅雷
  9. vue实现查询多条记录_sql:多表查询
  10. graphpad如何做x轴在上方的图_数据分析最有用的25个 Matplotlib图