5-10 公路村村通 (30分)

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。
输入格式:

输入数据包括城镇数目正整数N≤1000 ≤1000和候选道路数目M( ≤3N ≤3N);随后的M行对应MMM条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。
输出格式:

输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。
输入样例:

6 15
1 2 5
1 3 3
1 4 7
1 5 4
1 6 2
2 3 4
2 4 6
2 5 2
2 6 6
3 4 6
3 5 1
3 6 1
4 5 10
4 6 8
5 6 3

输出样例:

12

思路
关键词:最小生成树

点击访问 PTA-测验

#include<stdlib.h>
#include<stdio.h>/* 评测结果
时间  结果  得分  题目  编译器     用时(ms)  内存(MB)  用户
2016-08-28 07:05    答案正确    30  5-10    gcc     43  5   569985011
测试点结果
测试点     结果  得分/满分   用时(ms)  内存(MB)
测试点1    答案正确    15/15   2   1
测试点2    答案正确    2/2     2   1
测试点3    答案正确    2/2     1   1
测试点4    答案正确    5/5     43  5
测试点5    答案正确    6/6     24  5
查看代码*/
struct data {int VerNode,Coast;
};
typedef struct LNode* Vertex;
struct LNode {struct data a[1001];int Left,Right;
};
void InsertV(Vertex,int ,int,int);
int Prim(Vertex ,int );
Vertex CreatV(int);
int Comp(const void*a,const void*b) {struct data x=*(struct data *)a;struct data y=*(struct data *)b;return x.Coast - y.Coast ;
}int main() {int N,M;scanf("%d%d",&N,&M);Vertex V=CreatV(N+1);int from,to,lenth;for(int i=0; i<M; i++) {scanf("%d%d%d",&from,&to,&lenth);InsertV(V,from,to,lenth);}for(int i=1; i<=N; i++) {qsort(V[i].a,V[i].Right-V[i].Left,sizeof(struct data),Comp);
//      printf("%d",i);
//      for(int j=V[i].Left;j<V[i].Right ;j++){//          printf("{-%d=%d}",V[i].a[j].VerNode,V[i].a[j].Coast  );
//      }printf("\n");}printf("%d",Prim(V,N));return 0;
}int Prim(Vertex V,int N) {int right=0,left=0,Node[1001],Coast=0;for(int i=1; i<=N; i++) {if(V[i].Right >V[i].Left) {if(right) {if(V[i].a[0].Coast <V[Node[0]].a[0].Coast) {Node[0]=i;}} else {Node[right++]=i;}}}Coast+=V[Node[0]].a[0].Coast ; Node[right++]=V[Node[0]].a[0].VerNode;V[Node[0]].Left ++;
//  printf("-%d-",right);while(right<N) {int flag=-1;for(int i=0; i<right; i++) {if(V[Node[i]].Left<V[Node[i]].Right) {if(flag!=-1) {if(V[Node[i]].a[V[Node[i]].Left].Coast <V[Node[flag]].a[V[Node[flag]].Left ].Coast)flag=i;} else {flag=i;}}}if(-1==flag)break;int i;for(i=0;i<right;i++){if(V[Node[flag]].a[V[Node[flag]].Left].VerNode==Node[i])break;}if(i==right){Node[right++]=V[Node[flag]].a[V[Node[flag]].Left].VerNode;Coast+=V[Node[flag]].a[V[Node[flag]].Left].Coast ;}V[Node[flag]].Left++;}for(int i=0;i<right;i++){
//      printf("[%d]",Node[i]);}
if(right>=N)return Coast;else return -1;
}Vertex CreatV(int num) {Vertex V=(Vertex)malloc(sizeof(struct LNode)*num);for(int i=0; i<num; i++) {V[i].Left =0;V[i].Right =0;}return V;
}
void InsertV(Vertex V,int from,int to,int lenth) {V[from].a[V[from].Right].Coast =lenth;V[from].a[V[from].Right++].VerNode =to;V[to].a[V[to].Right].Coast =lenth;V[to].a[V[to].Right++].VerNode =from;
}

5-10 公路村村通 (30分)相关推荐

  1. 7-5 公路村村通 (30 分)(C语言实现)

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...

  2. 浙大数据结构:08-图7 公路村村通 (30 分)Prim与Kruskal算法

    08-图7 公路村村通 (30 分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N( ...

  3. 7-3 公路村村通 (30分)含解析

    7-3 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤10 ...

  4. 7-10 公路村村通 (30 分)(C语言)

    7-10 公路村村通 (30 分) (写在前面:Kruskal算法不够完善,跪求大佬指点怎么修改,拜托拜托

  5. 08-图7 公路村村通 (30分)

    是关于最小生成树的问题(包含v个顶点v-1条边,且边的权重和最小),利用Kruskal贪心算法–将边合并成树,每次都取权值最小的边并且不构成回路,就利用到了并查集的算法(用数组存父节点). 08-图7 ...

  6. 08-图7 公路村村通 (30 分)

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤)和候选道路数目M(≤):随后的M行 ...

  7. 7-1 公路村村通 (30 分)

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...

  8. 7-10 公路村村通 (30 分)

    题目描述: 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目 ...

  9. 公路村村通 (30分)【C语言】Prim算法 和 Kruskal算法

    目录 题目: 输入格式 输出格式 输入样例 输出样例 问题分析 最小生成树的特点 算法 Prim算法 代码实现 Prim函数:小树变大的过程中记录fee(费用和)和count(已收集的边数) Find ...

最新文章

  1. 跟我学Springboot开发后端管理系统8:Matrxi-Web权限设计实现
  2. 2020多校第1场A题【后缀数组+思维】
  3. windbg-!process显示进程
  4. 一个创业公司的API网关落地实践--转
  5. 将JavaScript集成到QML中
  6. x86汇编-1(第一章—第二章)8086处理器基本情况
  7. VMware8.0虚拟机中安装Ubuntu12.04使用NAT设置连接网络
  8. Java并发编程高级篇(十):分离任务的执行和结果的处理
  9. opencv 平面法向量_在OpenCV中绘制平面的法向量
  10. 关于ORACLE的GUID主键生成
  11. js负数比较大小_【建阳童小|阅享数学(第十一期)】负数的由来
  12. HDU 3790 最短路径问题 (SPFA)
  13. 减少SQL Server ASYNC_NETWORK_IO等待类型
  14. c语言有趣的编程代码,一个有趣的小程序
  15. 1.Yii2 -- Controller, Request, Response, Cookie, Session
  16. 台式计算机电源机箱维修,终于理会电脑电源故障的维修方法
  17. 最小二乘法曲线拟合(c++实现)
  18. 顶岗周记篇通用计算机,计算机实习周记20篇
  19. matlab 不等式组求解例子,matlab求解不等式组
  20. python搜索pdf内容所在页码_使用pyPDF从文档中检索页码

热门文章

  1. win服务器系统备份,win10 windows server backup备份方法_windows10怎么备份操作系统
  2. 2020.3网易互娱游戏客户端开发面试
  3. 网上找到的用xml传输图片
  4. matlab函数定义详解
  5. 今天给大家分享使用Scratch做一个抛物运动研究之愤怒的炮弹!
  6. Unity学习之路——VideoPlayer
  7. 数学计算机小论文范文,小学数学小论文范文
  8. GprMax2D / 3D——文件下载与入门
  9. Windows Sever 2008 获得NTFS文件系统的方式
  10. Notepad++格式化JS代码