計蒜客:灌溉(生成樹)
阿新 • • 發佈:2018-12-06
https://nanti.jisuanke.com/t/34
到了旱季農業生產的灌溉就成了一個大問題。為了保證灌溉的順利,某縣政府決定投資為各個村之間建立灌溉管道。
輸入第1行包括一個整數N,表示某縣的村莊的數量。(3≤N≤100),第2行-結尾為一個N×N的矩陣,表示每個村莊之間的距離。雖然在理論上,他們是N行,每行由N個用空格分隔的陣列成,實際上,他們限制在80個字元,因此,某些行會緊接著另一些行。當然,對角線將會是0,因為不會有線路從第i個村到它本身(任何兩個村之間的距離都不大於100000)。
輸出只有一個,為修建灌溉管道將所有村莊相連在一個灌溉系統裡所需的最小管道長度。
樣例輸入
4 0 4 9 21 4 0 8 17 9 8 0 16 21 17 16 0
樣例輸出
28
#include<stdio.h> #define N 120 int e[N][N],book[N],dis[N]; int main() { int i,j,n,m,u,v,sum,count,min,inf=99999999; scanf("%d",&n); for(i=1;i<=n;i++) for(j=1;j<=n;j++) scanf("%d",&e[i][j]); for(i=1;i<=n;i++) dis[i]=e[1][i]; book[1]=1; count=1; sum=0; while(count<n) { min=inf; for(i=1;i<=n;i++) if(book[i]==0&&min>dis[i]) { u=i; min=dis[i]; } count++; sum+=dis[u]; book[u]=1; for(v=1;v<=n;v++) if(dis[v]>e[u][v]) dis[v]=e[u][v]; } printf("%d\n",sum); return 0; }