【离散数学实验报告】最小生成树的生成

news2025/1/18 6:41:41

实验四:最小生成树

一、实验目的:

理解最小生成树的画法。提高学生编写实验报告,总结实验结果的能力,培养学生的逻辑思维能力和算法设计思想。能够独立完成简单的算法设计和分析,进一步用他们来解决实际问题,帮助学生学习掌握C和C++语言程序设计的基本方法和各种调试手段,使学生具备程序设计的能力。

二、实验内容:

给定一个带权图,求其最小生成树

三、实验原理

避圈法或破圈法

四、程序代码与实验结果

在这里插入图片描述

#include <iostream>
#include <vector>
#include <limits>

using namespace std;

const int MAX = 100;
const int INF = numeric_limits<int>::max();  // 定义 INF 为 int 类型的最大值
vector<vector<int>> result(MAX,vector<int>(2,0));

// prim 算法函数,计算最小生成树的权值并返回
int prim(vector<vector<int>> &graph) {
    int n = graph.size();  // 获取图中节点数
    vector<bool> visited(n, false);  // 标记节点是否已被访问过
    vector<int> minDist(n, INF);  // 记录节点到最小生成树的最短距离
    vector<int> parent(n, -1);  // 记录节点在最小生成树中的父节点
    minDist[0] = 0;  // 从第 0 个节点开始,到自身的距离为 0
    int res = 0;  // 最小生成树的权值

    for (int i = 0; i < n; ++i) {  // 进行 n 次遍历,每次加入一个节点
        int u = -1;  // 记录当前未访问节点中,距离最小生成树最近的节点
        for (int j = 0; j < n; ++j) {  // 寻找未访问节点中距离最小生成树最近的节点
            if (!visited[j] && (u == -1 || minDist[j] < minDist[u])) {
                u = j;
            }
        }
        cout<<"最小生成树各边如下:"<<endl;

        visited[u] = true;  // 标记该节点已被访问
        if (parent[u] != -1) {  // 输出加入最小生成树的边的权值和信息
            result[i-1][0] = parent[u]+1;
            result[i-1][1] = u+1;
            cout << parent[u] + 1 << "-" << u + 1 << ":" << minDist[u] << endl;
        }
        res += minDist[u];  // 将该节点到最小生成树的最短距离加入最小生成树的权值中

        for (int v = 0; v < n; ++v) {  // 更新未被访问节点到最小生成树的最短距离
            if (!visited[v] && graph[u][v] < minDist[v]) {
                minDist[v] = graph[u][v];
                parent[v] = u;  // 记录 v 在最小生成树中的父节点为 u
            }
        }
    }

    return res;  // 返回最小生成树的权值
}

int main() {
    // 定义邻接矩阵表示的图
    /*
     vector<vector<int>> graph = {
        {0, 1, 2, INF, INF},
        {1, 0, 4, 2, INF},
        {2, 4, 0, 3, 5},
        {INF, 2, 3, 0, 1},
        {INF, INF, 5, 1, 0}
    };

    */
    vector<vector<int>> graph(7, vector<int>(7, INF));

    cout<<"请输入你要为这6个顶点添加的边数:"<<endl;
    int n;
    cin>>n;
    cout<< "请为编号为1-6的这六个顶点添加边,格式为:V1-V2:W" <<endl;
    int a,b,w;

    for(int i = 1; i <= n; i++){
         scanf("%d-%d:%d",&a,&b,&w);
         graph[a-1][b-1] = graph[b-1][a-1] = w;
    }



    // 输出最小生成树的权值
   prim(graph);


    return 0;
}

结果

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/755256.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谁能成为首个RedCap规模商用的厂商?

RedCap在“降本、小尺寸、低功耗”的呼声中逐渐成为后5G时代的宠儿&#xff0c;随着相关技术的成熟&#xff0c;RedCap如何进一步商用成为行业关注的焦点。RedCap的发展&#xff0c;离不开运营商、芯片厂商、终端厂商、模组厂商等产业关键节点的通力合作。那RedCap离正式商用还…

关于hessian2的一些疑点(0CTF来分析)

目录 前言&#xff1a;csdn很久不用了&#xff0c;打算最近拾起来&#xff0c;主要是监督自己。 非常可疑的点 另一种方法通过JNDI注入来 构造完整的链子 这里&#xff0c;希望佬们解答解答&#xff0c;非常感谢&#xff01;&#xff01;&#xff01; 前言&#xff1a;csdn很…

【C++】开源:cpp-tbox百宝箱组件库

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍cpp-tbox百宝箱组件库。 无专精则不能成&#xff0c;无涉猎则不能通。。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;…

ingress之503问题

ingress之503问题 背景&#xff1a; 部署好应用服务(nsyai-test名称空间下)后&#xff0c;通过ingress做七层反代&#xff0c;浏览器访问域名一直出现503的错误&#xff0c;其中30086端口为ingress-controller控制器nodeport型service端口 问题&#xff1a; 网上查看发现是不…

【http-server】http-server的安装、前端使用http-server启动本地dist文件服务:

文章目录 一、http-server 简介:二、安装node.js:[https://nodejs.org/en](https://nodejs.org/en)三、安装http-server:[https://www.npmjs.com/package/http-server](https://www.npmjs.com/package/http-server)四、开启服务&#xff1a;五、http-server参数&#xff1a;【1…

OpenMMLab MMTracking目标跟踪官方文档学习(一)

介绍 MMTracking 是PyTorch的开源视频感知工具箱。它是OpenMMLab项目的一部分。 它支持 4 个视频任务&#xff1a; 视频对象检测 (VID) 单目标跟踪 (SOT) 多目标跟踪 (MOT) 视频实例分割 (VIS) 主要特点 第一个统一视频感知平台 我们是第一个统一多功能视频感知任务的开源工…

自建DNSlog服务器

DNSlog简介 在某些情况下&#xff0c;无法利用漏洞获得回显。但是&#xff0c;如果目标可以发送DNS请求&#xff0c;则可以通过DNS log方式将想获得的数据外带出来。 DNS log常用于以下情况&#xff1a; SQL盲注无回显的命令执行无回显的SSRF 网上公开提供dnslog服务有很多…

windows 搭建ssh服务

1、官网下载安装包&#xff1a;mls-software.com 2、点击安装&#xff08;一直默认即可&#xff09; 3、配置 opensshServer 4、成功登录

云数据库MySQL相关帮助

1.为什么创建数据库后在数据库列表中不显示&#xff1f; 因为列表读取的是information_schema&#xff0c;刚创建的数据库是空库&#xff0c;没有数据写入&#xff0c;不会写入缓存表&#xff0c;所以不会显示&#xff0c;但不影响正常使用&#xff0c;可以直接对新建的数据库进…

2.数据结构面试题--消失的数字

面试题:消失的数字 数组nums包含从0到n的所有整数,但是其中缺了一个,请编写代码找出那个缺失的整数,你有办法O(N)时间内完成吗? 方法1.排序:依次查找 如果下一个数不是上一个数1,那么上一个数字1就是消失的数字 冒泡排序的话时间复杂度是O(n^2) qsort排序的话是O(NlogN) 需…

Python爬虫——urllib_get请求的quote方法和urlencode方法

quote方法&#xff1a; 将字符转换为对应Unicode编码 import urllib.request import urllib.parse# 获取 https://www.baidu.com/s?wd周杰伦 网页源码 url "https://www.baidu.com/s?wd" headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKi…

stm32 报错 dev_target_not_halted

烧录stm32H743&#xff0c;在cubeprogrammer里面点击connect&#xff0c;报错dev_target_not_halted 解决方法&#xff1a;先把H743的boot0引脚接到高电平上&#xff0c;然后少上电&#xff0c;此时会停止内核的运行&#xff0c;再点击connect即可 H743管脚&#xff1a; 在芯…

windows系统 安装 InfluxDB

一、InfluxDB下载 InfluxDB的windows&#xff08;64-bit&#xff09;下载地址为&#xff1a;https://dl.influxdata.com/influxdb/releases/influxdb-1.7.7_windows_amd64.zip 二、安装 influxDB是不需要安装的&#xff0c;只需要将压缩文件解压到相应的目录即可&#xff1b;…

STM32CubeMX+Eclipse+gcc+Jlink 实现STM32开发环境搭建

本节记录通过STM32CubeMXEclipsegccJlink 进行STM32环境搭建的过程&#xff1b; 文章目录 一、环境确认二、Eclipse建立工程三、指定编译路径四、选择gcc路径五、选择make路径六、 选择Device 参考&#xff1a; https://blog.csdn.net/qq_35787848/article/details/124395509 h…

OPPO手机便签怎么上传录音文件?

相信很多网友对OPPO这个手机品牌并不陌生&#xff0c;因为它凭借时尚轻薄的外观设计、流畅简约的系统、清晰的拍照摄影以及高中低不同的价位选择&#xff0c;赢得了不少年轻消费者的青睐。不过在使用OPPO手机的过程中&#xff0c;也有不少用户表示自己遇到了各种各样的问题&…

mycat设置sql隔离级别的问题

问题 General log中出现大量SQL “SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ”。 该语句会引起两个问题&#xff0c; 1: "REPEATABLE READ"不是我们预期的事物隔离级别。 2: 大量无效的SQL影响性能。 注&#xff1a; MySql的可重复读会带来怎样…

高科技感发光地球(全息地球)的制作

目录 一、新建合成&#xff0c;导入素材 二、添加Form粒子 三、复制一层Form粒子 四、添加plexus 粒子 五、复制一层 plexus 粒子 六、添加调整层增加颜色 七、增加shine 效果 八、添加发光效果 九、最终效果图 高科技感发光地球&#xff08;全息地球&#xff09;的效…

自动化测试工具比传统测试工具的优势体现在哪里?

随着软件行业的快速发展和扩张&#xff0c;自动化测试工具在提高测试效率和质量方面起到了不可或缺的作用&#xff0c;那你知道自动化测试工具比传统测试工具的优势体现在哪里吗&#xff1f; 首先&#xff0c;自动化测试工具能够大大缩短测试周期。相比于传统手动测试&#xff…

在 3ds Max 中对二战球形炮塔进行建模

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 实际上被称为“斯佩里球炮塔”&#xff0c;它被用于二战的B-17和B-24轰炸机。 本教程介绍如何在 3ds Max 中对球形转塔进行建模。建模时&#xff0c;您将使用背景图片作为辅助。首先创建一个低多边形球体。…

【Linux系统编程(文件编程)】之复现cp指令、修改文件应用

文章目录 一、文件操作原理二、文件操作步骤三、实现 cp 复制指令四、修改配置文件五、写一个整数到文件六、写结构体数组到文件01 结构体02 结构体数组 一、文件操作原理 文件描述符&#xff1a; 对于内核而言&#xff0c;所有打开文件都由文件描述符引用。文件描述符是一个…