Prim算法以及Kruskal算法
Prim算法主要用于计算最小生成树。算法在选取最小路径的时候需要优化,算法思路:从某个顶点开始,假设v0,此时v0属于最小生成树结点中的一个元素,该集合假设V,剩下的点待选择的点为U,然后找寻V中的点与U中的点组成的路径最短,该点为vk。把V集合加入,U集合移除vk。然后重复以上步骤,知道U集合为空。

伪代码:
void Prim()
int minlen = ; //最小生成树的总长度
set V,U
->V //把0节点加入V中,编号0-n-1
while n- //循环n-1次
int curlen = INF //无限大
int uj = -
for i ->V.size()-
for j ->U.size()-
if Map[v[i]][u[j]] < curlen
curlen = Map[v[i]][u[j]]
uj = -
u[uj]->V //把该节点加入V
U->u[uj] //把该节点移除U
minlen += curlen;
hdu1102,简单题
题意:有N个村庄,用1到N标号,现在你需要建路连接村庄,使得建的路最短。一开始告诉你村庄的个数,然后给你一个邻接矩阵,然后再给你个q,告诉你有多少条路已经修了,然后告诉你哪两个村庄的路修好了距离为0.
#include<iostream>
#include<cstdio>
#include<vector>
#include<cstring>
using namespace std;
#define N (110)
int Map[N][N];
int n,minlen;
void Prim()
{
bool bVis[N];
memset(bVis,,sizeof(bVis));
vector<int> v/*已访问点*/,u;
for(int i=;i<n;++i)
if(i==) v.push_back(i);
else u.push_back(i);
bVis[] = ;
minlen = ;
for(int i=;i<n;++i)
{
int curminlen = 0x7fffffff;
int uk = -;
for(int j=;j<v.size();++j)
{
for(int k=;k<u.size();++k)
{
int curlen = Map[v[j]][u[k]];
if(curlen < curminlen)
{
curminlen = curlen;
uk = k;
}
}
}
minlen += curminlen;
v.push_back(u[uk]);
u.erase(u.begin()+uk);
}
}
int main()
{
#ifdef ONLINE_JUDGE
#else
freopen("test.txt","r",stdin);
#endif
while(~scanf("%d",&n))
{
for(int i=;i<n;++i)
for(int j=;j<n;++j)
scanf("%d",&Map[i][j]);
int q;
scanf("%d",&q);
while(q--)
{
int a,b;
scanf("%d%d",&a,&b);
Map[a-][b-] = Map[b-][a-] = ;
}
Prim();
printf("%d\n",minlen);
}
return ;
}
Kruskal算法:每次选一条最短路径,并且需要保证新选的边不会产生回路。https://www.cnblogs.com/skywang12345/p/3711496.html
Prim算法以及Kruskal算法的更多相关文章
- 最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind
最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树 前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小 ...
- 转载:最小生成树-Prim算法和Kruskal算法
本文摘自:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html 最小生成树-Prim算法和Kruskal算法 Prim算 ...
- C++编程练习(10)----“图的最小生成树“(Prim算法、Kruskal算法)
1.Prim 算法 以某顶点为起点,逐步找各顶点上最小权值的边来构建最小生成树. 2.Kruskal 算法 直接寻找最小权值的边来构建最小生成树. 比较: Kruskal 算法主要是针对边来展开,边数 ...
- 最小生成树之Prim算法和Kruskal算法
最小生成树算法 一个连通图可能有多棵生成树,而最小生成树是一副连通加权无向图中一颗权值最小的生成树,它可以根据Prim算法和Kruskal算法得出,这两个算法分别从点和边的角度来解决. Prim算法 ...
- java实现最小生成树的prim算法和kruskal算法
在边赋权图中,权值总和最小的生成树称为最小生成树.构造最小生成树有两种算法,分别是prim算法和kruskal算法.在边赋权图中,如下图所示: 在上述赋权图中,可以看到图的顶点编号和顶点之间邻接边的权 ...
- 最小生成树——Prim算法和Kruskal算法
洛谷P3366 最小生成树板子题 这篇博客介绍两个算法:Prim算法和Kruskal算法,两个算法各有优劣 一般来说当图比较稀疏的时候,Kruskal算法比较快 而当图很密集,Prim算法就大显身手了 ...
- Prim算法、Kruskal算法和最小生成树 | Minimum Spanning Tree
graph to tree非常有趣! 距离的度量会极大地影响后续的分析,欧式距离会放大差异,相关性会缩小差异,导致某些细胞群分不开. 先直观看一下,第一个是Prim,第二个是Kruskal.但是肯定都 ...
- 最小生成树Prim算法和Kruskal算法
Prim算法(使用visited数组实现) Prim算法求最小生成树的时候和边数无关,和顶点树有关,所以适合求解稠密网的最小生成树. Prim算法的步骤包括: 1. 将一个图分为两部分,一部分归为点集 ...
- Prim算法和Kruskal算法
Prim算法和Kruskal算法都能从连通图找出最小生成树.区别在于Prim算法是以某个顶点出发挨个找,而Kruskal是先排序边,每次选出最短距离的边再找. 一.Prim(普里姆算法)算法: ...
- 最小生成树-----Prim算法与Kruskal算法(未完
生成树(spanning tree):无向联通图的某个子图中,任意两个顶点互相都联通并且形成了一棵树,那么这棵树就叫做生成树. 最小生成树(MST,minimum spanning tree):如果为 ...
随机推荐
- hdu 4970 Killing Monsters(数组的巧妙运用) 2014多校训练第9场
pid=4970">Killing Monsters ...
- Windows Server 2012 R2 安装.NET Framework 3.5报错
简单记录一下,Windows Server 2012 R2 安装.NET Framework 3.5报错,下面是解决方法 载入ISO文件Windows Server 2012 R2,而且在安装的过程中 ...
- bash builtin eval
1 在开始执行eval后面的命令之前eval主要做了哪些事情 1.1 去掉反斜杠的quoting 比如\$ac_optarg,会变成$ac_optarg. 1.2 去掉单引号的quoting 比如: ...
- File to byte[] in Java
File to byte[] in Java - Stack Overflow https://stackoverflow.com/questions/858980/file-to-byte-in-j ...
- 剑指Offer面试题11(Java版):数值的整数次方
题目:实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数,同一时候不须要考虑大数问题 1.自以为非常easy的解法: ...
- YTU 2838: 改错题AB-装置连接
2838: 改错题AB-装置连接 时间限制: 1 Sec 内存限制: 128 MB 提交: 81 解决: 49 题目描述 注:本题只需要提交标记为修改部分之间的代码,请按照C++方式提交. 有AB ...
- yaffs2根文件系统的构建过程
基于BusyBox-1.19.2 (以其它作者的作为参考) 1. 下载BusyBox的源码 http://busybox.net/ 2. 解压#tar xvzf busybox-1.19.2.tgz ...
- [OS][FS]查看ext3文件系统分区的superblock
本文将介绍怎样读取一个分区的superblock: 1. 首先我们查看一下在磁盘上有哪些分区,通过fdisk -l 这里有三个分区,我们下面查看/dev/sda3(这是一个device file) 2 ...
- robotframework执行用例时,报错selenium.common.exceptions.WebDriverException: Message: unknown error: cannot get automation extension from unknown error: page could not be found: chrome-extension://aapnijgdinl
在用robotframework编写移动端测试用例(用chrome浏览器模拟手机浏览器),执行用例时, 报错selenium.common.exceptions.WebDriverException: ...
- String 对象
1 你使用位置(索引)可以访问字符串中任何的字符: var str="this is a demo"; alert(str[3])// s 字符串的索引从零开始, 所以字符串 ...