数据结构实验之图论六:村村通公路
来源:互联网 发布:淘宝刷销量处罚 编辑:程序博客网 时间:2024/04/27 19:47
数据结构实验之图论六:村村通公路
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
提示
来源
xam
示例程序
解法一:(Prime算法)
#include<stdio.h>#include<string.h>#define INF 2147483647int vis[10000],dis[101][101];int lowc[10000];int prime(int cost[][101],int n){ int i,j,p; int minc,res=0; memset(vis,0,sizeof(vis)); vis[1]=1; for(i=1;i<=n;i++) { lowc[i]=cost[1][i]; } for(i=1;i<n;i++) { minc=INF; p=-1; for(j=1;j<=n;j++) { if(0==vis[j]&&minc>lowc[j]) { minc=lowc[j]; p=j; } } if(INF==minc) return -1; res+=minc; vis[p]=1; for(j=1;j<=n;j++) { if(vis[j]==0&&lowc[j]>cost[p][j]) { lowc[j]=cost[p][j]; } } } return res;}int main(){ int m,n,i,j,x,y,w; while(scanf("%d %d",&n,&m)!=EOF) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(j==i) { dis[i][j]=0; } else { dis[i][j]=INF; } } } for(i=0;i<m;i++) { scanf("%d %d %d",&x,&y,&w); if(dis[x][y]>w) { dis[x][y]=w; dis[y][x]=w; } } printf("%d\n",prime(dis,n)); }}
解法二:(Kruscal算法)
#include<stdio.h>#include<string.h>#include<stdlib.h>int m,n,t;int vset[1010];struct node{ int a,b,c;}s[3010];int find(int x){ while(x!=vset[x]) x=vset[x]; return x;}void Kruscal(){ int i,fx,fy; for(i=0;i<m;i++) { fx=find(s[i].a); fy=find(s[i].b); if(fx!=fy) { t+=s[i].c; vset[fx]=fy; } }}int cmp(const void *a,const void *b){ return (*(struct node *)a).c>(*(struct node *)b).c?1:-1;}int main(){ int i,j,k,l; while(scanf("%d %d",&n,&m)!=EOF) { for(i=1;i<=n;i++) vset[i]=i; t=0; for(i=0;i<m;i++) { scanf("%d %d %d",&s[i].a,&s[i].b,&s[i].c); } qsort(s,m,sizeof(s[0]),cmp); Kruscal(); l=0; for(i=1;i<=n;i++) if(find(i)==i) l++; if(l!=1) printf("-1\n"); else printf("%d\n",t); }}
1 0
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 数据结构实验之图论六:村村通公路
- 水经注万能地图下载器功能大全
- 118 js Uncaught ReferenceError: Invalid left-hand side in assignment
- LayoutAnimationController
- 【HDU5570 BestCoder Round 63 (div1)C】【期望DP 公式化简】balls n种求m种颜色,同颜色球数为x贡献为x方 求期望
- 协议森林13 9527 (DNS协议)
- 数据结构实验之图论六:村村通公路
- 用Matlab GUI设计四则运算
- 取N到M条记录 取中间几条记录
- iOS Client 与WebSocket 通信(一)
- 欢迎使用CSDN-markdown编辑器
- Centos中nexus搭建maven私服
- 增广贤文
- Android 使用shape定义不同控件的的颜色、背景色、边框色
- Expression : invalid operator < 解决方法