Kruskal算法基本思想:在无向图中,每次找出最小的边,判断两个点是否联通,如果不联通,将这条边加入,直到整个图联通。
实现方法:并查集
代码:
//
// Created by ToroLHZ on 2022/4/2.
//
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
//点数,边数
const ll N=10,M=N*N/2;
//点数,边数
ll n,m;
//并查集数组
ll union_arr[N];
//存储边权信息结构体
struct Edge {
int x, y, w;
bool operator<(const Edge &t) const {
return w < t.w;
}
} e[M];
//并查集函数
ll find(int x)
{
return union_arr[x]==x?x:find(union_arr[x]);
}
int main() {
ll i, j, w;
//初始化并查集集合
for(i=0;i<N;i++)union_arr[i]=i;
cin >> n >> m;
while (m--) {
cin>>i>>j>>w;
//初始化边权信息
}
sort(e, e + m);
//找出要加入的边并合并
for(i=0;i<m;i++)
{
int a1=e[i].x;
int b1=e[i].y;
if(find(a1)!=find(b1))
{
union_arr[find(a1)]= find(b1);
}
}
return 0;
}