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;
}

posted on 2011-05-06 19:15  _Clarence  阅读(146)  评论(0编辑  收藏  举报

导航