#ifndef MIN_TREE_H
#define MIN_TREE_H
#include<queue>
#include<memory>
#include<limits.h>
#include<iostream>
#include"../data_struct/data_struct.h"
#include"../tool/tool_disjoint_set.h"
/// 最小生成树
/// 假设图中的顶点有n个,则生成树的边有n-1条,多一条会存在回路,少一路则不能把所有顶点联通起来,
/// 如果非要在图中加上权重,则生成树中权重最小的叫做最小生成树
class graph_min_tree
{
public:
/// 普里姆 时间是复杂度O(n2),适合稠密图。
static bool prim(const std::shared_ptr<graph_matrix> graph,
std::vector<int>& out_weight, std::vector<uint32_t>& out_parent)
{
out_weight.resize(graph->vertex.size());
//保存父节点
out_parent.resize(graph->vertex.size());
//取出邻接矩阵的第一行数据,也就是取出第一个顶点并将权和边信息保存于临时数据中
for (uint32_t i = 1; i < graph->vertex.size(); i++)
{
out_weight[i] = graph->matrix[0][i];
out_parent[i] =
最小生成树(两种算法)
最新推荐文章于 2022-01-06 16:36:18 发布