prim算法
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define maxn 110
#define inf 0x7f7f7f7f
int n;
int d[maxn][maxn];//图
int l[maxn];//未选点到已选点的距离
int v[maxn];//已选标记
int prim()
{
int ans=0;
l[0]=0;
memset(v,0,sizeof v);
v[0]=1;
for(int i=1;i<n;i++)
{
l[i]=d[0][i];
}
for(int i=1;i<n;i++)
{
int m=inf,temp;
for(int j=0;j<n;j++)
{
if(!v[j]&&m>l[j])
{
m=l[temp=j];
}
}
ans+=m;
l[temp]=0;
v[temp]=1;
for(int i=0;i<n;i++)
{
l[i]=min(l[i],d[temp][i]);
}
}
return ans;
}
int main()
{
while(~scanf("%d",&n))
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
scanf("%d",&d[i][j]);
}
}
printf("%d\n",prim());
}
return 0;
}