#include<iostream>
using namespace std;
int main()
{
int n,m,b,i,j,x,y,min,w,k,vnum;
cin>>n;
while(n--)
{
int a[52][52]={0},cost[100]={0},sum=0;
cin>>m>>b;
if(b==0)
{
for(i=1;i<=m;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
}
else
{
vnum=0;
for(i=1;i<=m;i++)
{
cin>>x>>y>>w;
a[x][y]=w;
a[y][x]=w;
vnum=max(vnum,x);
vnum=max(vnum,y);
}
m=vnum;
}
for(i=1;i<=m;i++)
{
if(a[1][i]==0)
cost[i]=1000000;
else
cost[i]=a[1][i];
}
cost[1]=0;
vnum=1;
while(vnum<m)
{ min=1000000;
for(i=1;i<=m;i++)
{
if(cost[i]!=0&&cost[i]<min)
{
min=cost[i];
j=i;
}
}
sum+=min;
cost[j]=0;
vnum++;
if(vnum==m) break;
for(i=1;i<=m;i++)
{
if(a[j][i]!=0&&a[j][i]<cost[i])
cost[i]=a[j][i];
}
}
cout<<sum<<endl;
}
//system ("pause");
return 0;
}
最小生成树 Prim
最新推荐文章于 2024-11-26 08:27:58 发布