图的应用之最小生成树

大纲

生成树介绍

特点

但n个

种类

最小生成树

应用

构造算法

MST性质

Prim算法

依次选择与顶点相邻的不会构成回路的最小边对应的顶点

Kruskal算法

依次选不会构成环的最小边

区别

Prim算法有n个顶点进行选择,每个顶点有n个选择,复杂度为O(n*n)

Kruskal算法需要对边e进行排序,用堆排序,时间复杂度为O(eloge)

代码实现

//Prim算法构造最小生成树
1.类型定义:边表(邻接顶点+最小边权);
2.初始化边权:起点start=0;存入与起点相关的边权:邻接顶点为start,边权为图中与start邻接的边大小,其余边默认初始为无穷 
3.由点找最小边,每个顶点进行n-1选择:在所有顶点中,选最小边并记录边权min,及其对应顶点m(为下一个要连接的顶点) 加入生成树,m对应边权赋0,在图中找与m相邻的最小边,并更新边表中对应最小边权及其邻接顶点。进行完n-1轮结束。
#include <iostream>
using namespace std;
//图的存储
//1.邻接矩阵存储:边数+顶点数+顶点表-一维+边表-二维
#define maxn 20
#define infi 33333333 
//类型定义 
typedef struct {char vexs[maxn];//顶点表 int arc[maxn][maxn];//边表 int vexnum,arcnum;//顶点数与边数 
}adjgraph;	
//生成树类型定义
struct {int adjvex;int minedge;//默认为0 }edge[maxn];			
void prim(adjgraph &g,int start){//初始化 int i,e,k,m,min; edge[start].minedge=0;//将起点start加入生成树中 for(int i=1;i<=g.vexnum;i++){//将与start有关的边加入生成树中 if(i!=start){edge[i].adjvex=start;//记录邻接顶点 edge[i].minedge=g.arc[start][i];//更新边权 }}//以顶点为准,选与其相连的最小边 for(e=1;e<=g.vexnum-1;e++){//每个顶点均要进行n-1次选择 min=infi;//记录最小边for(k=1;k<=g.vexnum;k++){//对n个顶点进行选边 if(edge[k].minedge!=0&&edge[k].minedge<min){//有边且比最小边小 m=k;//记录顶点:下一个要考虑的点min=edge[k].minedge;//更新最小边 }}//加入新结点到生成树中 edge[m].minedge=0;//在邻接矩阵中查与m相连的最小边 for(i=1;i<=g.vexnum;i++){//更新生成树表 if(i!=m&&g.arc[m][i]<edge[i].minedge){edge[i].minedge=g.arcnum[m][i];//更新边 edge[i].adjvex=m;//更新顶点 }} } 
}
//kruskal算法构造最小生成树
1.存边并按由小到大排序
2.边表中个数>1时:取最小边,如果不会构成回路,将边加入生成树中,边表个数--

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

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

相关文章

C51学习归纳13 --- AD/DA转换

AD/DA转换实现了计算机和模拟信号的连接&#xff0c;扩展了计算机的应用场景&#xff0c;为模拟信号数字化提供了底层支持。 AD转换通常是多个输入通道&#xff0c;使用多路选择器连接到AD开关&#xff0c;实现AD多路复用的目的&#xff0c;提高利用率。 AD/DA转换可以使用串口…

Java创建线程的方式

继承Thread类 这是创建线程的基本方式之一。你需要创建一个新的类&#xff0c;该类继承自Thread类&#xff0c;并重写run()方法。然后&#xff0c;你可以创建这个类的一个实例并调用它的start()方法来启动新线程。 public class MyThread extends Thread { Override public vo…

Ubuntu 移除netplan

Ubuntu 移除netplan 鉴于netplan现在还不成熟&#xff0c;桌面版还是NetworkManager的天下&#xff0c;故移除之。 云服务器用netplan的多(深度学习租卡一般docker不用考虑) 仅限于你能物理上直接使用Ubuntu&#xff0c;云服务器谨慎操作&#xff01;&#xff01;&#xff01…

我的创作纪念日(1825天)

Ⅰ、机缘 1. 记得是大一、大二的时候就听学校的大牛说&#xff0c;可以通过写 CSDN 博客&#xff0c;来提升自己的代码和逻辑能力&#xff0c;虽然即将到了写作的第六个年头&#xff0c;但感觉这句话依旧受用; 2、今年一整年的创作都没有停止&#xff0c;本年度几乎是每周都来…

UniApp或微信小程序中scroll-view组件使用show-scrollbar在真机Android或IOS中隐藏不了滚动条的解决办法

show-scrollbar 属性 不论是使用 变量 还是直接使用 布尔值或者直接使用 css 都是在 ios、Android 上是都没有效果。。 真机中还是出现滚动条 解决办法 添加下面CSS ::-webkit-scrollbar {display: none;width: 0 !important;height: 0 !important;-webkit-appearance: no…

盛世古董乱世金-数据库稳定到底好不好?

是不是觉得这个还用问&#xff1f; 是的要问。因为这个还是一个有争议的问题。但是争议双方都没有错。这就像辩论&#xff0c;有正反双方。大家都说的有道理&#xff0c;但是很难说谁对谁错。 正方观点&#xff1a;数据库稳定好 其实这个是用户的观点&#xff0c;应用开发人…

17个关键方法指南,保护您的web站点安全!

了解如何让您的web应用程序或网站安全&#xff0c;对于网站所有者来说至关重要。以下是一些关键步骤&#xff0c;可以帮助您保护网站免受攻击和数据泄露。 1.使用公钥加密技术 当数据以明文形式传输时&#xff0c;它容易受到中间人 &#xff08;MitM&#xff09; 攻击。这意味…

北航第六次数据结构与程序设计作业(查找与排序)选填题

一、 顺序查找的平均查找长度ASL&#xff08;1 2 …… n&#xff09;/ n (n 1&#xff09;/ 2 二、 这半查找法的平均查找次数和判定树的深度有关系。若查找一个不存在的元素&#xff0c;说明进行了深度次比较。 注意&#xff0c;判定树不是满二叉树&#xff0c;因此深…

安卓网络通信(多线程、HTTP访问、图片加载、即时通信)

本章介绍App开发常用的以下网络通信技术&#xff0c;主要包括&#xff1a;如何以官方推荐的方式使用多线程技术&#xff0c;如何通过okhttp实现常见的HTTP接口访问操作&#xff0c;如何使用Dlide框架加载网络图片&#xff0c;如何分别运用SocketIO和WebSocket实现及时通信功能等…

HTTP协议 快速入门

http概述 无状态性&#xff1a;HTTP是一个无状态协议&#xff0c;这意味着服务器不会在请求之间保存任何会话信息。每个请求都是独立的&#xff0c;服务器不会记住之前的请求。 请求-响应模型&#xff1a;HTTP通信是基于客户端发送请求和服务器返回响应的模型。客户端&#xf…

程序员入职一家新的公司的注意事项

1.心态 我把心态放在了第一位&#xff0c;是因为&#xff0c;良好的心态是成功的关键&#xff0c;刚入职一家公司&#xff0c;领导给你一个老破旧的项目&#xff0c;不要着急&#xff0c;你能把项目中的问题很好的解决了就是你的本事&#xff0c;我碰到过很多这样的情况&#…

Spark常见的可以优化的点

Shuffle 复用 # 1.以下操作会复用的shuffle结果&#xff0c;只会读一遍数据源 val rdd1 sc.textFile("hdfs://zjyprc-hadoop/tmp/hive-site.xml").flatMap(_.split(" ")).map(x > (x,1)).reduceByKey(_ _).filter(_._2 > 1) rdd1.count() rdd1.fil…

华为od-C卷200分题目2 - 找城市

华为od-C卷200分题目2 - 找城市 题目描述 一个城市规划问题&#xff0c;一个地图有很多城市&#xff0c;两个城市之间只有一种路径&#xff0c;切断通往一 个城市i的所有路径之后&#xff0c;其他的城市形成了独立的城市群&#xff0c;这些城市群里最大的城 市数量&#xff0…

JavaFX 场景

JavaFX场景对象是 JavaFX 场景图的根。换句话说&#xff0c;JavaFX 场景包含其中的所有可视 JavaFX GUI 组件。JavaFX 场景由类表示 javafx.scene.Scene。必须在JavaFX StageScene上设置对象 才能可见。在本 JavaFX教程中&#xff0c;我将向您展示如何创建 对象并向其添加 GUI …

什么是中断?STM32F407中断处理

什么是中断&#xff1f; 中断&#xff08;Interrupt&#xff09;是一种处理器处理异步事件的方法。当某个事件&#xff08;如外部设备的信号、定时器溢出等&#xff09;发生时&#xff0c;处理器可以暂停当前正在执行的任务&#xff0c;去处理这个事件&#xff0c;然后再返回继…

会声会影色彩校正在哪里 会声会影色彩素材栏在哪 会声会影中文免费版下载

会声会影是一款功能强大的视频编辑软件&#xff0c;它可以帮助用户轻松地编辑和制作视频。在进行视频编辑时&#xff0c;色彩校正是一个重要的步骤&#xff0c;它可以调整视频的色调、亮度和对比度等参数&#xff0c;使视频更加生动和鲜明。在会声会影中&#xff0c;色彩校正功…

使用shell脚本在Linux中管理Java应用程序

文章目录 前言一、目录结构二、脚本实现1. 脚本内容2. 使用说明2.1 配置脚本2.2 脚本部署2.3 操作你的Java应用 总结 前言 在日常开发和运维工作中&#xff0c;管理基于Java的应用程序是一项基础且频繁的任务。本文将通过一个示例脚本&#xff0c;展示如何利用Shell脚本简化这…

【Python/Pytorch - 网络模型】-- TV Loss损失函数

文章目录 文章目录 00 写在前面01 基于Pytorch版本的TV Loss代码02 论文下载 00 写在前面 在医学图像重建过程中&#xff0c;经常在代价方程中加入TV 正则项&#xff0c;该正则项作为去噪项&#xff0c;对于重建可以起到很大帮助作用。但是对于一些纹理细节要求较高的任务&am…

期权无风险套利(Risk-Free Arbitrage)举例以及期权无套利定价公式

期权市场的无风险套利 中文版 期权市场中的套利实例 为了清楚地说明&#xff0c;让我们通过一个现实的例子来展示套利。 期权市场中的套利实例 假设市场上有以下价格&#xff1a; 标的股票价格&#xff1a;100美元欧式看涨期权&#xff08;行权价100美元&#xff0c;3个月…

MySQL 保姆级教程(六):用通配符进行过滤

第 8 章 用通配符进行过滤 8.1 LIKE 操作符 通配符: 用来匹配值的一部分的特殊字符 搜索模式: 由字面值、通配符或两者组合构成的搜索条件 为了在搜索子句中使用通配符&#xff0c;必须使用 LIKE 操作符 8.1.1 百分号&#xff08;%&#xff09;通配符 输入: SELECT server_…