一次性ac,算法-----prim,书中的讲解不太详细而且有错误,希望有困难的acmer看看我的文章prim;
我的代码虽然说不是很精湛但也能勉强ac,有兴趣的可以看一下:
#include <iostream>
using namespace std;
const int Max=65536;
int min_edge (int a[],int n)
{
int min=Max;
int index;
for (int i=0;i<n;i++)
{
if (a[i]!=0&&a[i]<min)
{
min =a[i];
index=i;
}
}
return index;
}
int main ()
{
int m;
int u=0;
int a[500][500]={0};
cin >>m;
int i=0;
while (i!=m)
{
int n;
int max=0;
int lowcost[501];
int closet [501];
cin >>n;
for (int j=0;j< n;j++)
for (int k=0;k< n;k++)
{
int p;
scanf("%d",&p);
if (p==0&&j!=k)
{
a[j][k]=Max;
}
else a[j][k]=p;
}
for (int p=0;p<n;p++)
{
lowcost[p]=a[0][p];
closet [p]=0;
}
closet[0]=0;
for (int h=1;h<n;h++)
{
int index=min_edge(lowcost,n);
if (lowcost[index]>max)
{
max = lowcost[index];
}
lowcost[index]=0;
for (int q=1;q<n;q++)
{
if (a[index][q]!=0&&lowcost[q]>a[index][q])
{
lowcost[q]=a[index][q];
closet[q]=index;
}
}
}
cout<<max<<endl;
i++;
}
return 0;
}