题目链接:http://poj.org/problem?id=1258 题目大意:给你n个农场及它们间的距离,求把所有农场联系起来的最短距离 思路:所有点连通的最小花费,及最小生成树 #include<stdio.h> #include<string.h> #define Max 1000000 #define N 5000 int n,Isin[N]; __int64 dis[N][N],d[N],sum; //结果可能很大,要定义成64位 void prime() { int i,j,min,index; sum=0; for(i=1;i<n;i++) { Isin[i]=0; d[i]=dis[0][i]; } Isin[0]=1; for(j=1;j<n;j++) { min=Max; for(i=1;i<n;i++) { if(!Isin[i] && d[i]<min) { min=d[i]; index=i; } } sum+=min; Isin[index]=1; for(i=1;i<=n;i++) if(!Isin[i] && d[i]>dis[i][index]) d[i]=dis[i][index]; } printf("%I64d/n",sum); } int main() { int i,j; while(scanf("%d",&n)!=EOF) { for(i=0;i<n;i++) for(j=0;j<n;j++) scanf("%I64d",&dis[i][j]); prime(); } return 0; }