HDU 1233---最小生成树问题
解法一 prim算法解决
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 101
#define MAX 1000000
int map[M][M],v[M];
int main()
{
int n,m,x,y,z,flag;
while(scanf("%d",&n) && n)
{
int total=0;
memset(v,0,sizeof(v));
memset(map,MAX,sizeof(map));
m=n*(n-1)/2;
for(int i=0;i<m;i++) //对m个输入进行处理
{
scanf("%d%d%d",&x,&y,&z);
map[x-1][y-1]=map[y-1][x-1]=z;
}
v[0]=1;
for(int i=1;i<n;i++)
{
int Min=MAX;
for(int j=0;j<n;j++)
{
if(!v[j]&&map[0][j]<Min)
{
Min=map[0][j];
flag=j;
}
}
total+=Min;
v[flag]=1; //做标记,将该点加入集合
for(int j=0;j<n;j++)
{
if(!v[j]&&map[0][j]>map[flag][j])
map[0][j]=map[flag][j]; //始终以map[0]记录当前最优节点的值
}
}
printf("%d\n",total);
}
return 0;
}
解法二 并查集解决----Kurl
浙公网安备 33010602011771号