首页 > 其他分享 >7.4.3 最小生成树

7.4.3 最小生成树

时间:2024-06-18 14:55:55浏览次数:15  
标签:closedge MAX 最小 生成 INT second 7.4 vecnum unsigned

最小生成树

参考书:《数据结构(C语言版)》严蔚敏

正在学习这本书,把书中的数据结构用 c++ 代码实现了一遍

prim 算法

#include <vector>
#include <cstdio>
#include <climits>

using namespace std;

unsigned minimum(const vector<pair<unsigned, int>>& closedge) {
    unsigned res = 0;
    int lowcost = INT_MAX;
    for (unsigned i = 0; i < closedge.size(); ++i) {
        if (closedge[i].second != 0 && closedge[i].second < lowcost) {
            res = i;
            lowcost = closedge[i].second;
        }
    }
    return res;
}

/*
 * 和书上相比做了一些化简:
 * 1. 直接用邻接矩阵表示图,没有用 struct MGraph
 * 2. 用 vector<pair<unsigned, int>> 表示 closedge
 */
void MinSpanTree_PRIM(const vector<vector<int>>& G, unsigned u) {
    unsigned vecnum = G.size();
    // closedge[i] 表示集合 U 一步到达 集合 V-U 中顶点 i 的最小cost;
    // pair<unsigned, int>: first 表示通过哪个顶点到达 i,second: 最小 cost 的值
    vector<pair<unsigned, int>> closedge(vecnum);
    for (unsigned i = 0; i < vecnum; ++i) {
            closedge[i] = {u, G[u][i]};
    }

    printf("first vec is V%u\n", u + 1);
    for (unsigned i = 1; i < vecnum; ++i) {
        unsigned k = minimum(closedge);
        printf("next vec is V%u, cost: %d\n", k + 1, closedge[k].second);
        closedge[k].second = 0; // 点 k 加入集合 U

        for (unsigned j = 0; j < vecnum; ++j) {
            if (G[k][j] < closedge[j].second)
                closedge[j] = {k, G[k][j]}; // 更新 U 到 集合 V-U 中顶点的最小 cost
        }
    }
}

int main() {
    vector<vector<int>> G = {
      // v1,        v2,      v3,    v4,      v5,        v6
        {0,         6,       1,     5,       INT_MAX,   INT_MAX},
        {6,         0,       5,     INT_MAX, 3,         INT_MAX},
        {1,         5,       0,     5,       6,         4},
        {5,         INT_MAX, 5,     0,       INT_MAX,   2},
        {INT_MAX,   3,       6,     INT_MAX, 0,         6},
        {INT_MAX,   INT_MAX, 4,     2,       6,         0}
    };

    MinSpanTree_PRIM(G, 0);
    return 0;
}

标签:closedge,MAX,最小,生成,INT,second,7.4,vecnum,unsigned
From: https://www.cnblogs.com/AngleLin/p/18254354

相关文章

  • 探索Redis的运行情况和数据——一次有趣的Redis旅程【GPT生成】
    探索Redis的运行情况和数据——一次有趣的Redis旅程前言Redis,一个高性能的键值对数据库,广泛应用于缓存、会话管理和实时数据处理。如果你正在使用Redis,你可能会好奇如何检查它的运行情况,以及它究竟存储了哪些数据。在这篇博客中,我将带你一起使用Xshell连接到服务器,探索Redis的奥......
  • Net6 EFCore 基于MSSQL & T4 自动生成字段注释
    文件模板代码<#@templatelanguage="C#"#><#@outputextension=".cs"#><#@assemblyname="System.Core"#><#@importnamespace="System.IO"#><#@importnamespace="System.Linq"#>......
  • 66aix AI生成系统-中文版安装
    66aix是一款多功能的AI助手工具,可以帮助您生成独特的内容,美化和修改您的文章内容或,以及生成图像,去除图像背景。同时,它还包括完整功能的语音转换文本系统。系统要求PHPPHP8ExtensionscURL,OpenSSL,mbstring,MySQLiDatabaseMySQL5.7.3+orMariaDBequivalentServer......
  • Dcat admin laravel 快速安装及生成相应页面(新手)
    使用工具:phpEnv,phpStorm操作步骤:安装阿里云Composer镜像:打开命令行工具,如CMD或PowerShell。切换到自己安装phpEnv的www目录下我的是D:\Studysoft\phpEnv\www 。执行以下命令以设置全局Composer镜像:composerconfig-grepo.packagistcomposerhttps://mirror......
  • 使用 shell 快速生成字符串的哈希值
    使用方式echo-n"dev"|sha256sum|cut-d''-f1此外也可以使用md5sum、sha224sum、sha1sum等,替换命令中的sha256sum即可。命令解释echo将字符串"dev"通过管道符传递给标准输出,-n选项可以去掉多余的换行符sha256sum本身接收的参数是文件路径,如果不指定,则从标......
  • 代码随想录算法训练营第38天|● 理论基础 ● 509. 斐波那契数● 70. 爬楼梯 ● 746.
    动态规划理论基础动态规划,英文:DynamicProgramming,简称DP,如果某一问题有很多重叠子问题,使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有状态推导,而是从局部直接选最优的,动态规划做题步骤确定dp数组(dptable)以及......
  • NumPy 差分、最小公倍数、最大公约数、三角函数详解
    NumPy差分离散差分意味着相邻元素之间的减法。例如,对于[1,2,3,4],离散差分将是[2-1,3-2,4-3]=[1,1,1]要找到离散差分,使用diff()函数。示例:importnumpyasnparr=np.array([10,15,25,5])newarr=np.diff(arr)print(newarr)返回:[510-20],因为15-......
  • 小白next项目初步上手搭建一个随机社会信用代码生成及验证功能网站
    先看看效果网址是:https://xinyongdaima.aitoolpro.work/#主要实现功能实现随机社会信用代码生成及验证;无数据存储功能;技术栈next.jstailwind工具sublimeChatGPT4o步骤准备工作:需要电脑安装node生成项目打开终端并运行以下命令:npxcreate-next-app@late......
  • MyBatisX插件生成代码
    MyBatisX插件MyBatisPlus提供了一个IDEA插件——MybatisX,使用它可根据数据库快速生成Entity、Mapper、Mapper.xml、Service、ServiceImpl等代码,使用户更专注于业务。下面演示具体用法安装插件在IDEA插件市场搜索MyBatisX,进行在线安装配置数据库连接在IDEA中配置数据......
  • 生成式 AI 服务应用之Langchain 和 DashScope Reranker 彻底改变您的文档检索过程(教程
    介绍在当今信息泛滥的时代,找到所需的确切文档似乎是一件不可能完成的事情。传统搜索引擎经常让您在无关内容中苦苦挣扎,浪费宝贵的时间。但不要担心,因为有一对强大的组合正在等待彻底改变您的搜索体验:Langchain和DashScopeReranker。推荐文章《如何使用CodeLlama......