题目:用避圈法求无向图G的最小生成树
输入:
正整数N M,N代表无向图G的阶数;M代表边数。
随后的M行对应M条边,每行给出3个正整数,分别是该边关联的两个顶点以及该边的权值(假设所有顶点从1到N编号,所有边的权值都不同)。
输出:
用避圈法生成最小生成树过程中选择的边序列,并输出最小生成树的权值。
若G没有生成树,则输出-1.
思路:先实现并查集类UnionFindSet,再实现kruskal算法
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
const int Max = 100;
struct Edge
{
int n1, n2, value;
};
bool cmp(Edge e1, Edge e2)
{
return e1.value < e2.value;
}
class UnionFindSet
{
private:
vector<int>parent,rank;
public:
UnionFindSet(int n)
{
for (int i = 0; i <= n; i++)
{
parent.