Advertisement

最小生成树之克鲁斯卡尔算法

阅读量:

构建最小生成树的过程,是在一个无向且连通的图中选取合适的边,从而形成一个子图,该子图在保持连通性的前提下,所有边的权重总和达到最小值。
应用:当给出n个城市的分布以及各城市之间的距离时,问题转化为如何规划修建若干条公路以实现所有城市的连通,并确定此时所需修建的公路总长度。

以下是经 黑车司机 总结和优化的最小树算法

所采用的数据结构

  1. node_set[i],表示节点i所属的集合,初始状态下每个节点单独构成一个集合
  2. size[i],用于记录集合i中包含的节点数量,初始值为1
  3. edge[i],edge结构用于存储无向边的相关信息,包括连接的两个节点以及对应的边权重
    整体流程如下:
  4. 初始化所需的数据结构
  5. 将edge数组按照升序方式进行排序
  6. 依次遍历edge数组中的每条边,若该边连接的两个节点分别属于不同的集合,则将这两个集合进行合并操作,重复此过程直到所有节点最终归属于同一集合。
    代码及注释:
复制代码
    #include<iostream>
    #include<stdio.h>
    #include<string.h>
    #include<string>
    #include<algorithm>
    #include<queue>
    #include<vecto

全部评论 (0)

还没有任何评论哟~