#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <list>
#include <stack>
#include <algorithm>
using namespace std;
int main()
{
const int max=100000000;
int T;
scanf("%d",&T);
while (T--)
{
int n;
scanf("%d",&n);
int i,j,A[100][100];
int d[100];
bool record[100]={false};
for (i=0;i<=n-1;i++)
for (j=0;j<=n-1;j++)
scanf("%d",&A[i][j]);
for (i=0;i<=n-1;i++)
d[i]=max;
int min;
int pos;
int ans=0;
d[0]=0;
for (i=0;i<=n-1;i++)
{
min=max;
for (j=0;j<=n-1;j++)
if (!record[j] && d[j]<min)
{
pos=j;
min=d[pos];
}
if (min==max)
continue;
ans+=min;
record[pos]=1;
for (j=0;j<=n-1;j++)
if (!record[j] && A[pos][j]<d[j])
d[j]=A[pos][j];
}
printf("%d\n",ans);
}
return 0;
}
最小生成树(Prim算法)
最新推荐文章于 2022-09-05 12:17:36 发布