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;
}
浙公网安备 33010602011771号