图结构练习——最小生成树
来源:互联网 发布:在线ps网站源码 编辑:程序博客网 时间:2024/06/07 15:33
图结构练习——最小生成树
Time Limit: 1000MS Memory limit: 65536K
题目描述
有n个城市,其中有些城市之间可以修建公路,修建不同的公路费用是不同的。现在我们想知道,最少花多少钱修公路可以将所有的城市连在一起,使在任意一城市出发,可以到达其他任意的城市。
输入
输入包含多组数据,格式如下。
第一行包括两个整数n m,代表城市个数和可以修建的公路个数。(n <= 100, m <=10000)
剩下m行每行3个正整数a b c,代表城市a 和城市b之间可以修建一条公路,代价为c。
输出
每组输出占一行,仅输出最小花费。
示例输入
3 21 2 11 3 11 0
示例输出
20
提示
来源
赵利强
示例程序
- 提交
- 状态
#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct{ int begin,end,len;}edge;int vexnum,arcnum,sum1;edge Edge[10010];int parent[10010];int cmp(const void* a,const void* b){return (*(edge *)a).len-(*(edge *)b).len;}int Find(int *parent,int e){ while(parent[e]>0) e=parent[e]; return e;}void KrusKal(){ int i,n,m; for(i=0;i<arcnum;i++) { n=Find(parent,Edge[i].begin); m=Find(parent,Edge[i].end); if(n!=m) { parent[n]=m; sum1=sum1+Edge[i].len; } }}int main(){ int i; while(scanf("%d%d",&vexnum,&arcnum)!=EOF) { memset(parent,0,sizeof(parent)); for(i=0;i<arcnum;i++) scanf("%d%d%d",&Edge[i].begin,&Edge[i].end,&Edge[i].len); qsort(Edge,arcnum,sizeof(Edge[0]),cmp); sum1=0; KrusKal(); printf("%d\n",sum1); } return 0;}
0 0
- SDUT 2144 图结构练习——最小生成树
- sdut2144图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 kruskal
- 图结构练习——最小生成树-prim
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- 图结构练习——最小生成树 Prim算法
- 图结构练习——最小生成树 Kruskal算法
- 图结构练习——最小生成树
- 图结构练习——最小生成树
- python中的切片
- Set与Map
- vector持有pair模版
- Android 用HorizontalScrollView实现ListView的Item滑动删除
- Android 中style attr declare-styleable theme以及引用方式
- 图结构练习——最小生成树
- Myeclipse导入Spring源码后少jar包问题--使用Jar命令重新打包
- hadoop入门之wordcount小案例
- npm install 出错
- android所有布局
- 结合Java反射用简单工厂模式改进抽象工厂模式
- 149.Shuffle an Array
- 【Spark Java API】Transformation(7)—cogroup、join
- 关于OC常用字符串函数介绍