应用场景,求最小生生树,prim o(n²),n指定点,kruskal(eloge),e指边,即prim算法从定点的角度取考虑,更适合边稠密的网络,kruskal算法从边的角度取考虑,更适合边稀疏的情况!

prim:

方法:

1.任意选取一个起始点,找到最与这个起始点相连边的权值最小的定点,得到集合点A

2.对A重复1的过程直到所有的点都被纳入集合A

kruskal:

方法:

1、将v个顶点,l条边的图G中所有的边按权值大小从小到大排序,这一步可以直接用库函数qsort或者sort。

2、从权值小的边开始依次选取,若选取的边使生成树T不形成回路,则选之;若选取的边使生成树形成回路,则将其舍弃;如此进行下去,直到选取v-1条边为止。

在上述的方法中,最关键的地方在于判断新加入的边与生成树是否构成回路,判断图是否构成回路有很多方法,这里我们使用并查集来判断图是否构成回路。

并查集实现方法:

将顶点划分到不同集合中,每个集合中的顶点表示一个无回路的连通分量。算法开始时,将n个顶点划分到n个集合中,每个集合一个顶点,表示顶点之间互不相通。当选取一条边时,若它的两个顶点属于不同的集合,则表明连通了两个不同的连通分量,因每个连通分量没有回路,所以连通后仍然不会有回路,因此保留这条边;同时把两个集合进行合并成为一个集合。若选取的边属于同一个集合,则舍弃此边。

5513. 连接所有点的最小费用

给你一个points 数组,表示 2D 平面上的一些点,其中 points[i] = [xi, yi] 。

连接点 [xi, yi] 和点 [xj, yj] 的费用为它们之间的 曼哈顿距离 :|xi - xj| + |yi - yj| ,其中 |val| 表示 val 的绝对值。

请你返回将所有点连接的最小总费用。只有任意两点之间 有且仅有 一条简单路径时,才认为所有点都已连接。

1.最小生成树裸题,prim优先队列实现,kruskal排序+并查集实现

class Solution:def minCostConnectPoints(self, points: List[List[int]]) -> int:from queue import PriorityQueuecal=lambda p1,p2:abs(p1[0]-p2[0])+abs(p1[1]-p2[1])q=PriorityQueue()visited=set([i for i in range(len(points))])q.put((0,0))res=0while visited:cost,now=q.get()if now not in visited:continuevisited.remove(now)res+=costfor i in visited:q.put((cal(points[now],points[i]),i))return resclass Solution:def minCostConnectPoints(self, points: List[List[int]]) -> int:if len(points)<2:return 0cost=[]for i in range(len(points)-1):for j in range(i+1,len(points)):cost.append((abs(points[i][0]-points[j][0])+abs(points[i][1]-points[j][1]),i,j))cost.sort(key=lambda x:x[0])res=0p={i:i for i in range(len(points))}def find(x):if p[x]!=x:p[x]=find(p[x])return p[x]for c,i,j in cost:if find(i)!=find(j):p[find(i)]=find(j)res+=creturn res

最小生生树算法-prim/kruskal相关推荐

  1. 最小代价生成树Prim/Kruskal(c/c++)

    常用的求最小代价生成树的方法有两种:Prim算法和Kruskal算法,这两种算法都是贪心算法的应用, Prim算法 在一个无向带权图中求得最小生成树得思路是:从a顶点出发,将a放入u集合(表示已选), ...

  2. 最小生成树算法详解(prim+kruskal)

    最小生成树概念: 一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边. 最小生成树可以用kruskal(克鲁斯卡尔)算法或prim(普里 ...

  3. ReviewForJob——最小生成树(prim + kruskal)源码实现和分析

    [0]README 1)本文旨在给出 ReviewForJob--最小生成树(prim + kruskal)源码实现和分析, 还会对其用到的 技术 做介绍: 2)最小生成树是对无向图而言的:一个无向图 ...

  4. Prim / Kruskal - 局域网 - 洛谷 P2820

    Prim / Kruskal - 局域网 - 洛谷 P2820 某个局域网内有 n 台计算机和 k 条 双向 网线,计算机的编号是 1∼n.由于搭建局域网时工作人员的疏忽,现在局域网内的连接形成了回路 ...

  5. `Computer-Algorithm` 最小生成树MST,Prim,Kruskal,次小生成树

    Contents 最小生成树 Algorithm Prim Code Kruskal Prim&KruskalPrim \& KruskalPrim&Kruskal算法的性质 ...

  6. 【数据结构笔记29】最小生成树问题:Prim算法与Kruskal算法

    本次笔记内容: 8.1.1 Prim算法 8.1.2 Kruskal算法 文章目录 最小生成树问题 什么是最小生成树(Minimum Spanning Tree) 贪心算法 Prim算法 Kruska ...

  7. 【数据结构】最小生成树问题(Prim算法和Kruskal算法)

    相关概念 连通图与它的生成树 连通图的生成树是包含图中全部顶点的一个极小连通子图.若图的顶点数为n,则它的生成树含有n-1条边.一个连通图可能拥有多个生成树. 最小生成树(Minimum-Spanni ...

  8. ACM模板--邻接矩阵 无向图 Prim Kruskal Dijkstra

    /*** C++: Dijkstra算法获取最短路径(邻接矩阵)** @author skywang* @date 2014/04/24*/#include <iomanip> #incl ...

  9. ACM模板--邻接表 无向图 Prim Kruskal Dijkstra

    /*** C++: Dijkstra算法获取最短路径(邻接表)** @author judyge* @date 2014/04/24*/#include <iomanip> #includ ...

  10. 数据结构实验之图论九:最小生成树(Prim/Kruskal)

    Description 有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的.现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市. ...

最新文章

  1. 人工智能其实并不客观,算法会加剧刻板印象
  2. 计算机组装高考真题,年计算机组装与维修高考题.pdf
  3. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 类加载器构造函数分析 | DexPathList 引入 )
  4. Date.prototype.format
  5. python中gt是什么意思_python--gt;函数基础
  6. html推箱子怎么清除走过的,第九讲:HTML5该canvas推箱子原型实现
  7. Android开发真机测试方法 (转)
  8. c++for循环求最大公约数_C/C++编程笔记:C语言 for 循环精讲!实例讲解带你吃透...
  9. AdvancedWindowsPasswordRecovery3 及 注册码
  10. 软件过程与管理复习(九)
  11. 万网空间PHP 伪静态化,disuczx版块URL伪静态目录化设置方法
  12. 【教程】如何在C#中创建PDF417条码
  13. IT成长中的龟兔赛跑
  14. 极域电子教室解控方法
  15. 802.11 ------ Beacon帧、Beacon Interval、TBTT、Listen Interval、TIM、DTIM
  16. 2017中国云计算技术大会将于5月18-19日在京召开
  17. 第三方支付平台:易宝支付
  18. 计算机打字键盘怎么控制,键盘是怎样分区的,打字时每个手指分别可控制哪些键...
  19. python手写汉字识别_用python实现手写数字识别
  20. ppt如何删除所有特效?

热门文章

  1. 技术大佬:我去,你写的 switch 语句也太老土了吧
  2. 如何自己动手免费申请软件著作权
  3. dbf是什么文件格式
  4. 计算机启动方式如何选择USB启动,如何设置电脑从usb启动详细方法
  5. 什么教我们用计算机画画,作文:我第一次用电脑画画
  6. OSError: exception: access violation writing 0x0000000000000000
  7. wps编号无法继续_wps的多级编号出问题了
  8. 笔记本连接android手机屏幕,实现手机、电脑屏幕共享的7个步骤
  9. 电机驱动模块--L298N
  10. 定义复数java_java怎么定义复数?