CODEVS上关于最小生成树的一个题目
2018-01-25 18:07
344 查看
题目描述 Description
农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了使花费最少,他想铺设最短的光纤去连接所有的农场。 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。 每两个农场间的距离不会超过100000
输入描述 Input Description
第一行: 农场的个数,N(3<=N<=100)。
第二行..结尾: 接下来的行包含了一个N*N的矩阵,表示每个农场之间的距离。
输出描述 Output Description
只有一个输出,是连接到每个农场的光纤的最小长度和。
样例输入 Sample Input
4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0
样例输出 Sample Output
28
农民约翰被选为他们镇的镇长!他其中一个竞选承诺就是在镇上建立起互联网,并连接到所有的农场。当然,他需要你的帮助。 约翰已经给他的农场安排了一条高速的网络线路,他想把这条线路共享给其他农场。为了使花费最少,他想铺设最短的光纤去连接所有的农场。 你将得到一份各农场之间连接费用的列表,你必须找出能连接所有农场并所用光纤最短的方案。 每两个农场间的距离不会超过100000
输入描述 Input Description
第一行: 农场的个数,N(3<=N<=100)。
第二行..结尾: 接下来的行包含了一个N*N的矩阵,表示每个农场之间的距离。
输出描述 Output Description
只有一个输出,是连接到每个农场的光纤的最小长度和。
样例输入 Sample Input
4
0 4 9 21
4 0 8 17
9 8 0 16
21 17 16 0
样例输出 Sample Output
28
#include <stdio.h> #define M 105 int main(void) { int n=0; //输入农场的数目 int distance[M][M]; //各农场之间的距离 int visited[M]={0}; //记录已经联通的农场 int minDistance[M]={0}; //记录各农场距离最小生成树的最小距离 int i=0,j=0,k=0; //用来对distance数组进行遍历 int sum=0; //链接农场所需最短的光纤 int min=0; //用来寻找距当前农场最短距离的农场 int tmp=0; scanf("%d",&n); for(i=0;i<n;i++) { for(j=0;j<n;j++) { scanf("%d",*(distance+i)+j); } } //初始化,从第一个农场开始,此时各点距离最小生成树的最短距离就是距离这个点的距离 visited[0]=1; for(i=0;i<n;i++) { minDistance[i] = distance[0][i]; } for(i=1;i<n;i++) { min = 999999; //选取距离最小生成树距离最短的一个农场 for(j=0;j<n;j++) { if(!visited[j]&&min>minDistance[j]) { min = minDistance[j]; k = j; } } visited[k] = 1; sum+=min; //因为新加入一个点,所以对于各点距离最小生成树的最短距离发生变化,进行比较得出新的最短的 for(j=0;j<n;j++) { if(!visited[j]&&minDistance[j]>distance[k][j]) { minDistance[j] = distance[k][j]; } } } printf("%d",sum); return 0; }
相关文章推荐
- 【Codevs1078】最小生成树 Prim算法(5/1000)
- 【最小生成树】CODE[VS] 2627 村村通
- codevs1078 最小生成树
- codevs 1078 最小生成树
- 【codevs2399】【BZOJ2753】滑雪与时间胶囊,bfs+最小生成树
- codevs1078 最小生成树
- codevs3287货车运输(最小生成树+LCA)
- CODEVS 1078 最小生成树
- 【DP/单调栈】关于单调栈的一些题目(codevs 1159,codevs 2673)
- 最小生成树 之 CODE[VS] 1078 最小生成树
- codevs 1078 最小生成树
- codevs1403 新三国争霸 (最小生成树+dp)
- codevs 1519 过路费(最小生成树+LCA)
- Codevs1078 最小生成树( kruskal )
- 【最小生成树】Codevs2455繁忙的都市
- code[vs]最小生成树 1078,1231
- 关于最小生成树中的kruskal算法中判断两个点是否在同一个连通分量的方法总结
- 【codevs1078】最小生成树,prim算法
- Design Tutorial: Inverse the Problem CodeForces - 472D 最小生成树,好题目
- codevs 1002 dfs+最小生成树(建图!!)