#include <stdio.h>
#include <stdlib.h>
#include <cstring>
int m[1005][1005], book[1005], dist[1005], sum;
void prim(int n)
{
int i, j;
for( i = 1; i <= n; i++)
{
dist[i] = m[i][1];
}
book[1] = 1;
for(i = 2 ; i <= n; i++)
{
int pos = 0;
int Min = 100001;
for( j = 1; j <= n ;j++)
{
if(!book[j]&&Min>dist[j])
{
Min = dist[j];
pos = j;
}
}
sum += dist[pos];
book[pos] = 1;
for(j = 1 ; j <= n ; j++)
{
if(!book[j]&&dist[j]>m[pos][j])
{
dist[j] = m[pos][j];
}
}
}
printf("%d\n", sum);
}
int main()
{
int t, n , i, j ,k, a[1005];
scanf("%d", &t);
while(t--)
{
sum = 0;
memset(book, 0, sizeof(book));
scanf("%d", &n);
for( i = 1 ; i <= n ;i++)
{
scanf("%d", &a[i]);
}
for( i = 1 ; i <= n ;i++)
{
for( j = 1 ; j <= n; j++)
{
m[i][j] = m[j][i] = 3*(a[i]+a[j]) + 7;
}
}
prim(n);
}
return 0;
}
prim算法 之 SDUT2937 人活着系列之寻找最完美的人生
最新推荐文章于 2021-11-28 22:41:57 发布