hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)
还是畅通工程
Time Limit : 4000/2000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 5 Accepted Submission(s) : 3
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
Input
当N为0时,输入结束,该用例不被处理。
Output
Sample Input
3
1 2 1
1 3 2
2 3 4
4
1 2 1
1 3 4
1 4 1
2 3 3
2 4 2
3 4 5
0
Sample Output
3
5
Hint
Huge input, scanf is recommended.
Source
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
#define MAXN 110
#define UPPERDIS 9999999
int cost[MAXN][MAXN];
int n;
//普里姆算法模板
int lowcost[MAXN],closest[MAXN];
int prim(int v0)
{
int i,j,mindis,minone;
int ans = ;/*用来记录最小生成树的总长度*/
/*各点距离初始化*/
for(i = ;i < n;i++)
{
lowcost[i] = cost[v0][i];
closest[i] = v0;
}
for(i = ;i < n-;i++)
{
mindis = UPPERDIS;
for(j = ;j < n;j++)
if(lowcost[j] && mindis > lowcost[j])
{
mindis = lowcost[j];
minone = j;
}
/*将找到的最近点加入最小生成树*/
ans += lowcost[minone];
lowcost[minone] = ;
/*修正其他点到最小生成树的距离*/
for(j = ;j < n;j++)
if(cost[j][minone] < lowcost[j])
{
lowcost[j] = cost[j][minone];
closest[j] = minone;
}
}
return ans;
}
int main()
{
while(scanf("%d",&n)!=EOF){
if(n==) break;
memset(cost,,sizeof(cost));
for(int i=;i<n*(n-)/;i++){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
cost[a-][b-] = c;
cost[b-][a-] = c;
}
printf("%d\n",prim());
}
return ;
}
Freecode : www.cnblogs.com/yym2013
hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)的更多相关文章
- 图的普里姆(Prim)算法求最小生成树
关于图的最小生成树算法------普里姆算法 首先我们先初始化一张图: 设置两个数据结构来分别代表我们需要存储的数据: lowcost[i]:表示以i为终点的边的最小权值,当lowcost[i]=0说 ...
- 图解最小生成树 - 普里姆(Prim)算法
我们在图的定义中说过,带有权值的图就是网结构.一个连通图的生成树是一个极小的连通子图,它含有图中全部的顶点,但只有足以构成一棵树的n-1条边.所谓的最小成本,就是n个顶点,用n-1条边把一个连通图连接 ...
- 最小生成树-普利姆(Prim)算法
最小生成树-普利姆(Prim)算法 最小生成树 概念:将给出的所有点连接起来(即从一个点可到任意一个点),且连接路径之和最小的图叫最小生成树.最小生成树属于一种树形结构(树形结构是一种特殊的图),或者 ...
- 图论---最小生成树----普利姆(Prim)算法
普利姆(Prim)算法 1. 最小生成树(又名:最小权重生成树) 概念:将给出的所有点连接起来(即从一个点可到任意一个点),且连接路径之和最小的图叫最小生成树.最小生成树属于一种树形结构(树形结构是一 ...
- JS实现最小生成树之普里姆(Prim)算法
最小生成树: 我们把构造连通网的最小代价生成树称为最小生成树.经典的算法有两种,普利姆算法和克鲁斯卡尔算法. 普里姆算法打印最小生成树: 先选择一个点,把该顶点的边加入数组,再按照权值最小的原则选边, ...
- 图->连通性->最小生成树(普里姆算法)
文字描述 用连通网来表示n个城市及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,赋于边的权值表示相应的代价.对于n个定点的连通网可以建立许多不同的生成树,每一棵生成树都可 ...
- 图的生成树(森林)(克鲁斯卡尔Kruskal算法和普里姆Prim算法)、以及并查集的使用
图的连通性问题:无向图的连通分量和生成树,所有顶点均由边连接在一起,但不存在回路的图. 设图 G=(V, E) 是个连通图,当从图任一顶点出发遍历图G 时,将边集 E(G) 分成两个集合 T(G) 和 ...
- HDU.1233 还是畅通工程(Prim)
HDU.1233 还是畅通工程(Prim) 题意分析 首先给出n,代表村庄的个数 然后出n*(n-1)/2个信息,每个信息包括村庄的起点,终点,距离, 要求求出最小生成树的权值之和. 注意村庄的编号从 ...
- 【数据结构】 最小生成树(三)——prim算法
上一期介绍到了kruskal算法,这个算法诞生于1956年,重难点就是如何判断是否形成回路,此处要用到并查集,不会用当然会觉得难,今天介绍的prim算法在kruskal算法之后一年(即1957年)诞生 ...
随机推荐
- android studio提示信息乱码解决方法
在build.gradle文件中加上 android {compileOptions.encoding = "GBK"}就好了
- Guava ---- Ordering排序工具
使用Guava的排序工具类, 高速实现对象的单变量排序和多变量排序, 让你的开发效率爆炸... import com.google.common.collect.Lists; import com.g ...
- apk签名相关文章
签名详解:https://stackoverflow.com/questions/4245303/android-sf-file 使用不同的keystore,签名后生成SF文件一模一样正常吗? 正常 ...
- 定制ADempiere(1)- 会议记录
本文是<ADempiere 3.6 Cookbook>一书的实例笔记,详细内容请查阅该书完整内容. 1. 登录pgAdmin III,创建表c_mom: CREATE TABLE adem ...
- 转载:【Linux+windows】PHP5.5安装PHPRedis扩展
首先,你必须安装了 Redis服务器,然后才能安装php-redis扩展,就像先安装mysql,然后再将php-mysql扩展安装并引入(区别是:php-redis扩展插件php没有自带,php-my ...
- C++二维数组讲解、二维数组的声明和初始化
我们知道,一维空间是一条线,数学中用一条数轴来表达:二维空间是一个平面,数学中用平面坐标系来表达.那么二维数组又是什么样的呢? 线与面 我们用一个下标来描述一维数组中的某个元素,就好像在用数描述一条线 ...
- LDO和BUCK降压稳压器对比
LDO和BUCK降压稳压器对比 在采用MCU/DSP/FPGA设计的控制系统中,低压输入级(一般在12V以下),输出5V/3.3V/1.8V/1.5V/1.2V的电路中,常用的电源芯片是BUCK(降压 ...
- Apach 配置虚拟机时候DocumentRoot参数最后不要加斜杠
DocumentRoot "D:\baiduyun\webroot\jedi\app\static" 这样是可以的 DocumentRoot "D:\baiduyun\w ...
- max_int和-1
#include <stdio.h> int main(int argc, char *argv[]) { unsigned ; ) printf("umax:%u == -1\ ...
- [na]office 2010 2013卸载工具
http://www.ithome.com/html/soft/32777.htm Office 2003 || Office 2007 || Office 2010.