Kruskal算法是求解无向有权图的最小生成树的一种渐进时间复杂度为O(n+eloge)算法(如果用小根堆进行排序的话),它利用了贪心策略:每次寻找权值最小的边加入集合,且这个边的加入不会产生回路。详细的算法步骤分析,参照https://blog.csdn.net/mgsky1/article/details/77840286
#include<iostream>
#include<string>
#include<windows.h>
using namespace std;
int root[2000];
string tree="";
struct edge
{
int begin;
int end;
int weight;
};
typedef edge* Edge;
struct graph
{
int vn;
int en;
Edge data;
};
void init(graph *obj);
int seek_root(int v);
void quick_sort(graph *obj, int front, int back);
int qs(graph * obj, int front, int back);
int Kruskal(graph *g);
int main()
{
memset(root, 0, sizeof(root));
graph *g = new graph;
init(g);
quick_sort(g, 0, g->en-1);//这里用了快排
cout<<"The weight of minimum tree is:"<<