最小生成树之克鲁斯卡尔算法
发布时间
阅读量:
阅读量
构建最小生成树的过程,是在一个无向且连通的图中选取合适的边,从而形成一个子图,该子图在保持连通性的前提下,所有边的权重总和达到最小值。
应用:当给出n个城市的分布以及各城市之间的距离时,问题转化为如何规划修建若干条公路以实现所有城市的连通,并确定此时所需修建的公路总长度。
以下是经 黑车司机 总结和优化的最小树算法
所采用的数据结构
- node_set[i],表示节点i所属的集合,初始状态下每个节点单独构成一个集合
- size[i],用于记录集合i中包含的节点数量,初始值为1
- edge[i],edge结构用于存储无向边的相关信息,包括连接的两个节点以及对应的边权重
整体流程如下: - 初始化所需的数据结构
- 将edge数组按照升序方式进行排序
- 依次遍历edge数组中的每条边,若该边连接的两个节点分别属于不同的集合,则将这两个集合进行合并操作,重复此过程直到所有节点最终归属于同一集合。
代码及注释:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<queue>
#include<vecto
全部评论 (0)
还没有任何评论哟~
