PKU ACM 1258 Agri-Net http://acm.pku.edu.cn/JudgeOnline/problem?id=1258
熟悉了prim算法后这样的题目在十分钟内真的可以解决!最小生成树,prim真的很有用!
#include <iostream> using namespace std; const int Max = 1000000; int edge_min (int a[],int n) { int min =Max; int index=0; for (int i=0;i<n;i++) { if (a[i]<min&&a[i]!=0) { min = a[i]; index = i; } } return index; } int main () { int n; while (scanf("%d",&n)!=EOF) { int sum=0; int arc[100][100]={0}; int lowcost [100]={0}; for (int i=0;i<n;i++) for (int j=0;j<n;j++) { scanf ("%d",&arc[i][j]); } for (int q=0;q<n;q++) { lowcost[q]=arc[0][q]; } for (int k=1;k<n;k++) { int index = edge_min (lowcost,n); sum+=lowcost[index]; lowcost[index]=0; for (int p=0;p<n;p++) { if (arc[index][p]<lowcost[p]&&arc[index][p]!=0) { lowcost[p]=arc[index][p]; } } } cout<<sum<<endl; } return 0; }