本文共 1242 字,大约阅读时间需要 4 分钟。
某地区经过对城镇交通状况的调查,得到现有城镇间快速道路的统计数据,并提出“畅通工程”的目标:使整个地区任何两个城镇间都可以实现快速交通(但不一定有直接的快速道路相连,只要互相间接通过快速路可达即可)。现得到城镇道路统计表,表中列出了任意两城镇间修建快速路的费用,以及该道路是否已经修通的状态。现请你编写程序,计算出全地区畅通需要的最低成本。
输入格式:
输入的第一行给出村庄数目N (1≤N≤100);随后的N(N−1)/2行对应村庄间道路的成本及修建状态:每行给出4个正整数,分别是两个村庄的编号(从1编号到N),此两村庄间道路的成本,以及修建状态 — 1表示已建,0表示未建。
输出格式:
输出全省畅通需要的最低成本。
输入样例:
41 2 1 11 3 4 01 4 1 12 3 3 02 4 2 13 4 5 0
输出样例:
3
程序如下:
#include <bits/stdc++.h>using namespace std;#define INF 10000int a[100][100];int b[100];int c[100];int main(){ int N,sum=0; cin>>N; for(int i=1;i<=N*(N-1)/2;i++) { int q,w,e,r; cin>>q>>w>>e>>r; if(r==1) a[q][w]=0; else { a[q][w]=e; a[w][q]=a[q][w]; } } c[1]=1; for(int i=1;i<=N;i++) { b[i]=a[1][i]; } int count=1; while(count<N) { int min=INF; int j=0; for(int i=1;i<=N;i++) { if(c[i]==0&&b[i]<min) { min=b[i]; j=i; } } c[j]=1; count++; sum=sum+min; for(int i=1;i<=N;i++) { if(c[i]==0&&b[i]>=a[j][i]) { b[i]=a[j][i]; } } } cout<<sum; return 0;}
转载地址:http://afzh.baihongyu.com/