实现代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=155;
int f[N];
int n,m;
struct node{
int begin,end,w;
};
void init(){
for(int i=0;i<n;i++)
f[i]=i;
}
int find(int x){
if(f[x]==x)
return x;
return f[x]=find(f[x]);
}
void join(int x,int y){
f[x]=y;
}
bool cmp(node a,node b){
return a.w<b.w;
}
int main(){
cin>>n>>m;
node G[N];
init();
for(int i=0;i<m;i++){
cin>>G[i].begin>>G[i].end>>G[i].w;
}
sort(G,G+m,cmp);
int ans=0;
for(int i=0;i<m;i++){
int rb=find(G[i].begin);
int re=find(G[i].end);
if(rb!=re){
ans+=G[i].w;
join(rb,re);
}
}
int cnt=0;
for(int i=0;i<n;i++){
if(f[i]==i)
cnt++;
}
if(cnt!=1){
cout<<"无法构成最小生成树"<<endl;
}else{
cout<<"生成最小生成树的总代价为:"<<ans<<endl;
}
return 0;
}
运行结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/7bcbbaa85578d2c6c4ff451c828ff28c.png)