图结构练习——最小生成树
来源:互联网 发布:淘宝上如何捐赠旧衣物 编辑:程序博客网 时间:2024/05/17 09:00
题目描述
有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。
输入
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n <= 100, m <=1000)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
输出
每组输出占一行,仅输出最小花费。
示例输入
3 21 2 11 3 11 0
示例输出
20
///用普里姆算法基本模板
#include<stdio.h>#include<string.h>#define N 101#define MaxInt 0x3f3f3f3fint map[N][N],low[N],visited[N],m;int n;void prim(){ int i,j,pos,min,result=0; memset(visited,0,sizeof(visited)); visited[1]=1; pos=1; for(i=1;i<=n;i++) { if(i!=pos) low[i]=map[pos][i]; } for(i=1;i<n;i++) { min=MaxInt; for(j=1;j<=n;j++) { if(visited[j]==0 && min>low[j]) { min=low[j]; pos=j; } } result+=min; visited[pos]=1; for(j=1;j<=n;j++) { if(visited[j]==0 && low[j]>map[pos][j]) low[j]=map[pos][j]; } }printf("%d\n",result);}int main(){ int i,j; int a,b,c; while(~scanf("%d %d",&n,&m)) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { map[i][j]=MaxInt; if(i==j) map[i][j]=0; } } for(i=0;i<m;i++) { scanf("%d%d%d",&a,&b,&c); if(map[a][b]>c) { map[a][b]=c; map[b][a]=c; } } prim(); } return 0;}
2 0
- SDUT 2144 图结构练习——最小生成树
- sdut2144图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 kruskal
- 图结构练习——最小生成树-prim
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 Prim算法
- 图结构练习——最小生成树 Kruskal算法
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- python基础学习笔记<面向对象编程>
- 《手把手教你学51单片机-C语言》之十一--------UART串口通信
- Hdu 5351 MZL's Border 2015ACM多校对抗赛第五场
- 测试测试
- 手机上的环境传感器
- 图结构练习——最小生成树
- 南邮 OJ 1626 股票投资问题
- linux下的Makefile详解(6)
- 【RequireJS 学习笔记】RequireJS 学习笔记 2 —— RequireJS 版 页码切换demo
- C# ActiveX开发及安装部署
- linux下的Makefile详解(7)
- JAVA多线程学习笔记<3> 停止线程
- 使用Spring Boot快速构建应用
- Leetcode42 Trapping Rain Water