【NYOJ 38 布线问题_(解法2 Prim算法)】教程文章相关的互联网学习教程文章

Dijkstra算法与Prim算法辨析

这两个算法真的很像,尽管它们的用处截然不同。Dijkstra是找单源非负的最短路径。Prim是找最小生成树。Dijkstra算法都是找当前标记集合点再扩一条边所形成的最短路径,然后更新标记点集,外扩路径集。Prim是找当前标记集合点再扩一条边中所形成的的最短边,然后更新标记点集,外扩边集。所以细节上是有不同的。Dijkstra复杂度O(N2), Prim O(eloge).原文:http://www.cnblogs.com/zqiguoshang/p/6688132.html

Prim算法模板【代码】

1 #include <stdio.h>2 #include <string.h>3 #include <algorithm>4usingnamespace std;5constint N=1001;6constint inf=1<<29;7int w[N][N];8int dis[N],flag[N];9int n,m,u,v,c; 10int prim() 11{ 12int sum=0;//计算最小距离13 memset(flag,0,sizeof(flag)); 14for(int i=1; i<=n; i++) 15 { 16 dis[i]=w[1][i];//把起点到每个点的距离付给dis17 } 18 flag[1]=1; 19for(int i=1; i<n; i++)//会更新n-1次...

NYOJ 38 布线问题_(解法2 Prim算法)【代码】

时间限制:1000 ms | 内存限制:65535 KB难度:4 描述南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1、把所有的楼都供上电。 2、所用电线花费最少 输入第一行是一个整数n表示有n组测试数据。(n<5) 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v<=500) 随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100)。(哪两栋楼间如果没有...

最小生成树之 prim算法和kruskal算法(以 hdu 1863为例)【代码】【图】

最小生成树的性质MST性质:设G = (V,E)是连通带权图,U是V的真子集。如果(u,v)∈E,且u∈U,v∈V-U,且在所有这样的边中,(u,v)的权c[u][v]最小,那么一定存在G的一棵最小生成树,(u,v)为其中一条边。构造最小生成树,要解决以下两个问题:(1).尽可能选取权值小的边,但不能构成回路(也就是环)。(2).选取n-1条恰当的边以连接网的n个顶点。Prim算法的思想:设G = (V,E)是连通带权图,V = {1,2,…,n}。先任选一点(一般选第一个点),...

算法设计和分析(Prim算法构建最小生成树)【代码】【图】

问题:给定无向图G(N,M)表明图G有N个顶点,M条边,通过Prim算法构造一个最小生成树分析:算法流程: 构造好的最小生成树就是step6运行代码:#include<cstdio> #include<string.h> #include<algorithm> #include<cmath> #include<iostream> #include<vector> #include<queue> #include<set> #include<map> #include<cctype> #include<stack> #define ios ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) #define mem(a,x) m...

Prim算法与Dijkstra算法的联系与区别【代码】

/* 图结构,邻接矩阵形式 */ElemType nodes[n];int edges[n][n];prim_or_dijkstra( int index, bool usePrim ) /* 起点 */{int dist[n] = { INF }; /* 从起点开始,到其他所有边的距离 */int distIndex[n] = { -1 };int visited[n] = { 0 };int selected = index; /*选中的点 *//* 初始化起点的可达边距离 */for ( i = 0; i < nodes.length; i++ )/* edges[起点][终点]=权重(不是INF就有边...

最小生成树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind【图】

最小支撑树树--Prim算法,基于优先队列的Prim算法,Kruskal算法,Boruvka算法,“等价类”UnionFind 最小支撑树树前几节中介绍的算法都是针对无权图的,本节将介绍带权图的最小支撑树(minimum spanning tree)算法。给定一个无向图G,并且它的每条边均权值,则MST是一个包括G的所有顶点及边的子集的图,这个子集保证图是连通的,并且子集中所有边的权值之和为所有子集中最小的。本节中介绍三种算法求解图的最小生成树:Prim算法、Kr...

最小生成树之Prim算法【图】

h2.western { font-family: "Liberation Sans", sans-serif; font-size: 16pt } h2.cjk { font-size: 16pt } h2.ctl { font-size: 16pt } h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font-size: 18pt } h1.cjk { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt } h1.ctl { font-family: "Noto Sans CJK SC Regular"; font-size: 18pt } p { margin-bottom: 0.25cm; line...

算法起步之Prim算法【图】

原文:算法起步之Prim算法 prim算法是另一种最小生成树算法。他的安全边选择策略跟kruskal略微不同,这点我们可以通过一张图先来了解一下。 prim算法的安全边是从与当前生成树相连接的边中选择一条最短的一条,并且该边是应是生成树与生成树外一点的连接。 所以我们prim算法用汉字描述的过程应为:1初始化2构造最小优先队列,将所有节点都加入到最小优先队列中,所有节点的key设置为无穷大,开...

最小生成树prim算法

codevs.cn 最优布线问题#include<cstdio>#include<cstring> bool u[101]; int g[101][101],minn[101]; int main(){ int n,m,q,p,total=0; scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d",&q,&p); scanf("%d",&g[q][p]); } memset(minn,0x7f,sizeof(minn)); //初始化 minn[1]=0; memset(u,1,sizeof(u)); for (int i=1;i<=n;i++) { int k=0; for (int j=1;j<=n;j++) if (u[j]&&(minn[j]<...

最小生成树——Prim算法(C++)

源代码:#include<cstdio>#include<cstring>int m,n,i[1001][1001],h[1001];bool f[1001]={0};long long ans(0);int main(){ memset(i,0x7f,sizeof(i)); memset(h,0x7f,sizeof(h)); //将数组初始化,定义为最大值,为下面查找最小值做铺垫。 h[1]=0; //从编号为1的节点开始查找。 scanf("%d%d",&n,&m); for (int a=1;a<=m;a++) { int x,y,z; scanf("%d%d%d",&x,&y,&z); i[x][y]=i[y][x]=z; //注意这是无向图。 } for (int a=...

最小生成树之Prim算法【代码】

描述最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了!但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道路所需要的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A、B、C三座城市,只需要在AB之间和BC之间建造道路,那么AC之间也是可以通过这两条道路连通的)。输入每个测试点(输入文件...

prim算法【代码】

题目来自于hihocoder点击打开链接时间限制:10000ms单点时限:1000ms内存限制:256MB 描述最近,小Hi很喜欢玩的一款游戏模拟城市开放出了新Mod,在这个Mod中,玩家可以拥有不止一个城市了!但是,问题也接踵而来——小Hi现在手上拥有N座城市,且已知这N座城市中任意两座城市之间建造道路所需要的费用,小Hi希望知道,最少花费多少就可以使得任意两座城市都可以通过所建造的道路互相到达(假设有A、B、C三座城市,只需要在AB之间和BC之...

最小生成树,Prim算法实现【代码】【图】

最小生成树所谓最小生成树,就是一个图的极小连通子图,它包含原图的所有顶点,并且所有边的权值之和尽可能的小。首先看看第一个例子,有下面这样一个带权图:它的最小生成树是什么样子呢?下图绿色加粗的边可以把所有顶点连接起来,又保证了边的权值之和最小:去掉那些多余的边,该图的最小生成树如下: 下面我们再来看一个更加复杂的带权图:同样道理,下图绿色加粗的边可以把所有顶点连接起来,又保证了边的权值之和最小:去掉那...

prim算法(最小生成树)【代码】

其实prim算法和dijkstra算法差不多,不过迪杰斯特拉是算从 s->t 的最短路径,而prim是算连接全图的最短路径两者都是从一个起点开始进行广搜但克鲁斯卡尔算最最小生成树是把所有边都排序好然后慢慢添加边,用并查集维护,因为用到了边的排序,所以当题目边比较多是用prim比较好,点比较多是用克鲁斯卡尔算法好点 ///prim算法 (边多的用prim) #include<iostream> #include<stdio.h> #include<algorithm> #include<queue> #include<st...