#include <cstdio>
using namespace std;
int main()
{
int n,m,j,k,i,MIN,t1,t2,t3;
int e[7][7],dis[7],book[7]={0};
int INF=999999;
int coun=0,sum=0;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++){
if(i == j) e[i][j] = 0;
else e[i][j] = INF;
}
for(i=1; i<=m ;i++)
{
scanf("%d %d %d",&t1,&t2,&t3);
e[t1][t2] = t3;
e[t2][t1] = t3;
}
for(i=1;i<=m;i++){
dis[i] = e[1][i];
}
book[1] = 1;
coun++;
while(coun<n){
MIN = INF;
for(i=1;i<=n;i++)//查找离生成树最近的点
if(book[i]==0 && dis[i]<MIN){
MIN = dis[i];
j=i;
}
book[j] = 1;
coun++;
sum += dis[j];
for(k=1;k<=n;k++){
if(book[k]==0 && dis[k]>e[j][k])
dis[k] = e[j][k];
}
}
printf("%d\n",sum);
sum=0;
for(i=1;i<=n;i++)
if(dis[i]!=INF)
sum+=dis[i];
printf("%d\n",sum);
return 0;
}
最小生成树
最新推荐文章于 2024-07-05 14:38:31 发布