所谓赤裸裸最小生成树模型……就是这个啦
这里用Prim算法。诶?不知道Prim算法什么东东?去恶补一下图论算法吧~.~
这里用Prim算法。诶?不知道Prim算法什么东东?去恶补一下图论算法吧~.~
#include<iostream>
using namespace std;
const int N = 100;
long Prim(long weight[N][N],int farms);
int main()
{
int data,farms;
long distance[N][N];
cin>>data;
while(data-- > 0)
{
cin>>farms;
for(int i=0;i<farms;i++)
for(int j=0;j<farms;j++)
cin>>distance[i][j];
cout<<Prim(distance,farms)<<endl;
}
return 0;
}
long Prim(long weight[N][N],int farms)
{
int used[N],i,j,k,curfarm=0;
long curmin,min=0;
for(i=0;i<farms;i++) used[i] = 0;
used[0] = 1;
for(i=1;i<farms;i++)
{
curmin = 0x7fffffff;
for(j=0;j<farms;j++)
if(used[j])
{
for(k=0;k<farms;k++)
if(!used[k] && weight[j][k] < curmin)
{
curmin = weight[j][k];
curfarm = k;
}
}
used[curfarm] = 1;
min += curmin;
}
return min;
}
using namespace std;
const int N = 100;
long Prim(long weight[N][N],int farms);
int main()
{
int data,farms;
long distance[N][N];
cin>>data;
while(data-- > 0)
{
cin>>farms;
for(int i=0;i<farms;i++)
for(int j=0;j<farms;j++)
cin>>distance[i][j];
cout<<Prim(distance,farms)<<endl;
}
return 0;
}
long Prim(long weight[N][N],int farms)
{
int used[N],i,j,k,curfarm=0;
long curmin,min=0;
for(i=0;i<farms;i++) used[i] = 0;
used[0] = 1;
for(i=1;i<farms;i++)
{
curmin = 0x7fffffff;
for(j=0;j<farms;j++)
if(used[j])
{
for(k=0;k<farms;k++)
if(!used[k] && weight[j][k] < curmin)
{
curmin = weight[j][k];
curfarm = k;
}
}
used[curfarm] = 1;
min += curmin;
}
return min;
}