数据结构实验之图论六:村村通公路
来源:互联网 发布:网络泰迪含义 编辑:程序博客网 时间:2024/05/06 09:16
数据结构实验之图论六:村村通公路
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
当前农村公路建设正如火如荼的展开,某乡镇政府决定实现村村通公路,工程师现有各个村落之间的原始道路统计数据表,表中列出了各村之间可以建设公路的若干条道路的成本,你的任务是根据给出的数据表,求使得每个村都有公路连通所需要的最低成本。
输入
连续多组数据输入,每组数据包括村落数目N(N <= 1000)和可供选择的道路数目M(M <= 3000),随后M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个村庄的编号和修建该道路的预算成本,村庄从1~N编号。
输出
输出使每个村庄都有公路连通所需要的最低成本,如果输入数据不能使所有村庄畅通,则输出-1,表示有些村庄之间没有路连通。
示例输入
5 81 2 121 3 91 4 111 5 32 3 62 4 93 4 44 5 6
示例输出
19
提示
#include <stdio.h>#include <string.h>#include <stdlib.h>#define inf 0x3f3f3f3fint a[1010][1010];int dis[1010];int book[1010];int main(){ int n, m; while(~scanf("%d %d", &n, &m)){ memset(book,0,sizeof(book)); int i, j, k; for(i = 1;i <= n;i++){ for(j = 1;j <= n;j++){ if(i == j){ a[i][j] = 0; }else { a[i][j] = inf; } } } int u , v, w; for(i = 0;i < m;i++){ scanf("%d %d %d", &u, &v, &w); if(a[u][v] > w){ a[u][v] = w; a[v][u] = w; } } for(i = 1;i <= n;i++){ dis[i] = a[1][i]; } book[1] = 1;//将1这个点加入到最小生成树中 int cnt = 1; int sum = 0; int min; while(cnt < n){ min = inf; j = -1; for(i = 1;i <= n;i++){ if(book[i] == 0 && dis[i] < min){ min = dis[i]; j = i; } } if(j == -1){ break; } cnt++; sum += min; book[j] = 1; for(k = 1;k <= n;k++){ if(book[k] == 0&&dis[k] > a[j][k]){ dis[k] = a[j][k]; } } } if(j == -1){ printf("-1\n"); }else { printf("%d\n", sum); } } return 0;}
0 0
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- Node+Express+Jade
- 实习到工作相隔近一年,跨度有点大,跨度有点大!
- Android四大控件之ContentProvider
- windows核心编程之并行、并发、同步、异步
- sqlite关闭数据库连接
- 数据结构实验之图论六:村村通公路
- 水题——优先队列
- 重温static函数
- Android DEX安全攻防战
- CentOS 7 源码编译安装MySQL数据库
- 车牌识别
- MFC下CSocket编程详解
- 欢迎使用CSDN-markdown编辑器
- unity 集成 RenderDoc 调试shader的方法