Kruskal算法的C++实现文档

上传:salty35519 浏览: 9 推荐: 0 文件:cpp 大小:3.35KB 上传时间:2023-09-03 13:01:07 版权申诉

Kruskal算法是一种经典的图论算法,用于生成最小生成树。以下是一个完整的C++实现代码示例,供大家参考学习。

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

// 定义边结构体
struct Edge {
    int src, dest, weight;
};

// 定义并查集
class UnionFind {
public:
    vector<int> parent;

    UnionFind(int n) {
        parent.resize(n);
        for (int i = 0; i < n; i++) {
            parent[i] = i;
        }
    }

    int find(int x) {
        if (parent[x] == x)
            return x;
        return find(parent[x]);
    }

    void Union(int x, int y) {
        int xset = find(x);
        int yset = find(y);
        parent[xset] = yset;
    }
};

// Kruskal算法实现
vector<edge> kruskal(vector<edge>& edges, int v) {
    // 根据权重对边进行排序
    sort(edges.begin(), edges.end(), [](Edge a, Edge b) {
        return a.weight < b.weight;
    });

    vector<edge> result;
    UnionFind uf(v);

    int i = 0;
    while (result.size() < v - 1) {
        Edge next_edge = edges[i++];
        int x = uf.find(next_edge.src);
        int y = uf.find(next_edge.dest);

        // 如果加入该边不会构成环路,则加入最小生成树
        if (x != y) {
            result.push_back(next_edge);
            uf.Union(x, y);
        }
    }

    return result;
}

int main() {
    // 定义图的顶点数和边
    int v = 5;
    vector<edge> edges = {
        {0, 1, 2},
        {0, 4, 6},
        {1, 2, 3},
        {1, 4, 5},
        {2, 3, 1},
        {3, 4, 4}
    };

    // 调用Kruskal算法求解最小生成树
    vector<edge> min_spanning_tree = kruskal(edges, v);

    // 输出最小生成树的边和权重
    for (Edge edge : min_spanning_tree) {
        cout << edge.src << " - " << edge.dest << ": " << edge.weight << endl;
    }

    return 0;
}
edge>edge>edge>edge>edge>int>vector>algorithm>iostream>
上传资源
用户评论
相关推荐
Kruskal算法C++实现
Kruskal算法是一种常用的最小生成树算法,可以通过对图中边进行排序和选择,最终生成一棵包含所有节点的树。Kruskal算法的C++实现,展示了相关代码和详细的步骤说明,帮助读者理解和运用该算法。在
cpp
3.2KB
2023-07-26 09:33
Kruskal算法实现
利用Kruskal算法,用C语言编写出给定无向连通加权图G,构造一棵最小生成树的程序。
CPP
0B
2019-02-22 00:16
kruskal算法实现
kruskal算法实现,c++语言实现,对于无向图用右上角赋值,对称的左下角赋值为0
TXT
0B
2019-02-18 20:47
Kruskal算法实现
用VS写的C#程序,已经运行调试没有错误,并且有详细的注释,易懂
zip
0B
2019-05-28 19:40
Kruskal算法MATLAB实现
Kruskal算法的MATLAB实现,输入参数d是原图的权值矩阵;输出参数T是最小生成树的顶点组成的矩阵,每条边的两个顶点放在同一列中;a是最小生成树的总权值
DOC
0B
2019-01-13 17:48
Kruskal算法Kruskal
Kruskal算法Kruskal.txt
TXT
0B
2019-05-08 01:52
Kruskal算法python实现
Kruskal 算法的 python 实现,包括有向图的绘制,需要在桌面上构建关于有向图的 TXT。
PY
0B
2019-06-21 02:47
Kruskal算法matlab实现
无约束条件下克鲁斯卡尔(Kruskal)算法—Matlab实现
DOCX
0B
2019-06-01 01:40
KrusKal算法C实现
用KrusKal算法求最小生成树问题。对一个带权无向图,求其最小生成树,本程序功能通过KrusKal算法实现。
APPLICATION/X-RAR
99KB
2020-12-02 02:34
基于Union_FindKruskal算法C++实现
基于Union-Find数据结构实现Kruskal求最小生成树,代码设计及变量命名附详细注释。
rar
0B
2018-12-27 06:53
c++实现最小生成树Kruskal算法
c++实现最小生成树Kruskal算法,课程作业,供大家参考~~
ZIP
0B
2019-05-08 01:57
用c实现kruskal算法
算法分析与设计中的kruskal算法!
C
4KB
2020-09-02 07:38
Prim算法Kruskal算法Matlab实现
Prim算法和Kruskal算法的Matlab实现
PDF
0B
2019-06-01 01:40
Kruskal算法c语言实现
Kruskal算法,用C语言进行描述,有注释
DOC
68KB
2020-08-04 23:58
Kruskal算法
Kruskal算法的实现#define for if(0); else for #include #include using namespace std;
TXT
0B
2019-04-16 12:56