数据结构---Kruskal最小生成树

数据结构—Kruskal最小生成树

原理:参考趣学数据结构

代码:

快速排序:

#pragma once
#define elemType int
typedef struct vER {elemType u;elemType v;int weight;
}VER;
int quickSort(VER a[], int l, int h) {//快速排序int i = l, j = h;VER p = a[l];while (i < j) {while (i<j&&a[j].weight>p.weight) {//从右往左遍历查找比p更小的元素j--;}if (i < j) {a[i++] = a[j];}while (i < j&&a[i].weight <= p.weight) {//从左往右遍历查找比p更大的元素i++;}if (i < j) {a[j--] = a[i];}}a[i] = p;//分界的值,左边小于等于p,右边大于preturn  i;
}
void fenZhi(VER a[], int l, int h) {//分治if (l < h) {int mid = quickSort(a, l, h);//以mid为分界线,进行分治,然后递归下去排序fenZhi(a, l, mid - 1);fenZhi(a, mid + 1, h);}
}

Kruskal代码:

#include<stdio.h>
#include<stdlib.h>
#include"quickSort.h"
#define N 100
#define elemType int
//const int MAX_INT = (1 << 31) - 1;
//const int MAX_INT = 0X7fffffff;
#define  INF    (((unsigned int)(-1)) >> 1)
int visited[N];
typedef struct GraphMatrix {elemType vNode[N][N];int vNum, eNum;
}GraphMatrix;
void initGMaxtix(GraphMatrix &G) {//初始化邻接矩阵printf("输入顶点数和边数\n");scanf_s("%d%d", &G.vNum, &G.eNum);for (int i = 0; i < G.vNum; i++) {//初始化邻接矩阵for (int j = 0; j < G.vNum; j++) {G.vNode[i][j] = INF;}}printf("输入顶点v1到顶点v2和其边的权重\n");for (int i = 0; i < G.eNum; i++) {int v1, v2, weights;scanf_s("%d%d%d", &v1, &v2, &weights);G.vNode[v1][v2] = weights;}
}
void print16(GraphMatrix G) {printf("邻接矩阵如下:\n");for (int i = 0; i < G.vNum; i++) {for (int j = 0; j < G.vNum; j++) {printf("%d ", G.vNode[i][j]);}printf("\n");}
}
bool merge(int u, int v,int vNum) {//把所有是与v顶点同一个集合的 加入到与u顶点的同一个集合int p = visited[u];int q = visited[v];if (p == q) {//同一个集合return false;}for (int i = 0; i < vNum; i++) {if (visited[i] == q) {visited[i] = p;}}return true;
}
void Kruskal(GraphMatrix G, int gouZaoSCTreeENum) {//最小生成树VER a[N];int k = 0;//构造结构体顶点之间权重数组for (int i = 0; i < G.vNum; i++) {for (int j = 0; j < G.vNum; j++) {if (G.vNode[i][j] < INF) {//有边a[k].u = i;a[k].v = j;a[k].weight = G.vNode[i][j];k++;}}}//对边权重进行快速排序fenZhi(a, 0, k - 1);int ans = 0;int n = G.eNum;for (int i = 0; i < gouZaoSCTreeENum; i++) {if (merge(a[i].u, a[i].v, G.vNum)) {ans += a[i].weight;printf("\n%d-----%d有边\n", a[i].u, a[i].v);n--;if (n == 1) {printf("\n最小生成树的边的总长度为%d\n", ans);break;}}}
}
int main() {GraphMatrix G;initGMaxtix(G);print16(G);printf("\n");for (int i = 0; i < G.vNum; i++) {//首先初始化G.vNum个集合visited[i] = i;}printf("Kruskal最小生成树\n");Kruskal(G, G.eNum);printf("\n");system("pause");return 0;
}

测试截图:

请添加图片描述

时间复杂度O(nlogn),空间复杂度O(n)

如果存在什么问题,欢迎批评指正!谢谢!

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

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

相关文章

电脑打字手指正确姿势_写字坐姿不正确的难题,已被家长攻克,果然高手在民间...

全文1000字&#xff0c;预计阅读需7分钟​进入小学&#xff0c;老师会教一年级学生如何坐正&#xff0c;如何正确拿笔&#xff0c;但由于学生人数较多&#xff0c;加之学习课本知识等&#xff0c;老师很难将每一个学生的坐姿都教得很好。什么样的坐姿才是正确的&#xff1f;怎样…

云原生 - Istio可观察性之监控(四)

作者&#xff1a;justmine头条号&#xff1a;大数据与云原生微信公众号&#xff1a;大数据与云原生创作不易&#xff0c;在满足创作共用版权协议的基础上可以转载&#xff0c;但请以超链接形式注明出处。为了方便阅读&#xff0c;微信公众号已按分类排版&#xff0c;后续的文章…

word List 09

word List 09 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢

phpword 模板 多页_高中数学:各题型答题模板,吃透,灵活运用数学公式,解题更快!...

暑假已经接近尾声&#xff0c;部分地区已经开学了。最近有同学留言说&#xff0c;高三了&#xff0c;数学成绩很不好&#xff0c;该怎么办&#xff1f;数学拉分很多。针对高三复习&#xff0c;大家一定要注意题型的积累&#xff0c;每个题型都是有相应的答题模板&#xff0c;积…

使用.NET Core优雅获取并展示最新疫情数据

前言新型冠状病毒的出现&#xff0c;着实让人紧张。我每天一大早都会去查看今天的最新数据&#xff0c;可是每次的数据都挺让人揪心的。今天突然间很想看看过去的历史的数据&#xff0c;结果查了很多资料都不是很全。反正国家让我们待在家里做贡献&#xff0c;那我们也可以多做…

linux源码_从linux源码看epoll及epoll实战揭秘

从linux源码看epoll前言在linux的高性能网络编程中&#xff0c;绕不开的就是epoll。和select、poll等系统调用相比,epoll在需要监视大量文件描述符并且其中只有少数活跃的时候&#xff0c;表现出无可比拟的优势。epoll能让内核记住所关注的描述符&#xff0c;并在对应的描述符事…

《ASP.NET Core 微服务实战》-- 读书笔记(第9章)

第 9 章 微服务系统的配置微服务系统中的配置需要关注更多其他方面的因素&#xff0c;包括&#xff1a;配置值的安全读写值变更的审计能力配置信息源本身的韧性和可靠性少量的环境变量难以承载大型、复杂的配置信息应用要决定是否支持配置值的在线更新和实时变更&#xff0c;还…

数据结构---简单插入排序

数据结构—简单插入排序 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> void simpleInsertSort(int a[], int length) {//简单插入排序int j;for (int i 2; i < length; i) {//从第二个元素开始比较插入if (a[i]…

[蓝桥杯2018初赛]小朋友崇拜圈

题目描述 班里N个小朋友&#xff0c;每个人都有自己最崇拜的一个小朋友&#xff08;也可以是自己&#xff09;。 在一个游戏中&#xff0c;需要小朋友坐一个圈&#xff0c; 每个小朋友都有自己最崇拜的小朋友在他的右手边。 求满足条件的圈最大多少人&#xff1f; 小朋友编号为…

前端 JS/TS 调用 ASP.NET Core gRPC-Web

前言在上两篇文章中&#xff0c;介绍了ASP.NET Core 中的 gRPC-Web 实现 和 在 Blazor WebAssembly 中使用 gRPC-Web&#xff0c;实现了 Blazor WebAssembly 调用 ASP.NET Core gRPC-Web。虽然 ASP.NET Core 中的 gRPC-Web 实现目前还是试验性项目&#xff0c;但是鉴于它在生态…

数据结构---哈夫曼树

数据结构—哈夫曼树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> #define N 100 #define INF 2^31-1 typedef struct fNode {//哈夫曼树中每个节点的信息int c;//字符int parent;//父节点&#xff0c;左右孩子&am…

热电偶校验仪_热电偶校验方法_烟台一等热电偶,干湿两用温度校验炉公司

杭州中创为您详细解读hzzc6烟台一等热电偶的相关知识与详情&#xff0c;防爆涡轮流量计的转速通过拆正在机壳外的传感线圈来检测&#xff0e;当涡轮流量计叶片切割由壳体内**磁钢发生的磁力线时&#xff0c;就会引起传感线圈中的磁通变革&#xff0e;传感线圈将检测到的磁通周期…

手把手教你用C#做疫情传播仿真

手把手教你用C#做疫情传播仿真在上篇文章中&#xff0c;我介绍了用 C#做的疫情传播仿真程序的使用和配置&#xff0c;演示了其运行效果&#xff0c;但没有着重讲其中的代码。今天我将抽丝剥茧&#xff0c;手把手分析程序的架构&#xff0c;以及妙趣横生的细节。首先来回顾一下运…

word List 10

word List 10 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;

java程序员选择多个offer时需要看重哪些?_对不起,我们公司不要本科以下的大学生,学历对于程序员重不重要...

来自普通大学的学生&#xff0c;总会觉得逆袭如梦似幻&#xff0c;机会在哪里&#xff1f;但放长远来看&#xff0c;更重要的是要看到&#xff1a;环境只能影响&#xff0c;却不能决定我们的人生。人生路漫长&#xff0c;最终会怎样&#xff0c;还不一定呢&#xff01;在某综艺…

中小企业团队敏捷产品开发流程最佳实践

近期因为疫情的影响&#xff0c;不少互联网公司开始尝试远程工作。也出不了少如何做好远程工作的方法&#xff0c;我认为不管是场地办公还是远程办公都依赖于原来的产品开发流程。我曾经遵循CMMI5的流程管理过15人左右的跨国/语言/文化团队&#xff0c;也遵循敏捷Scrum管理过9人…

数据结构---二叉线索树

数据结构—二叉线索树 原理&#xff1a;参考趣学数据结构 代码&#xff1a; #include<stdio.h> #include<stdlib.h> typedef struct bmTree {int data;struct bmTree* lchild, *rchild;int ltag, rtag; }bmTree; bmTree * preNULL;//中序遍历的前驱指针 void cr…

revit如何根据坐标进行画线_铭成教你如何根据同步带的齿形进行选型

1、同步带齿形分类梯型齿同步带分为&#xff1a;最轻型MXL、超轻型XXL、特轻型XL、轻型L、重型H、特重型XH、超重型XXH&#xff0c;共七种&#xff0c;这几种是目前市场用的最广泛的。特殊齿型的同步带又分为&#xff1a;最轻型T2.5、轻型T5、重型T10、最重型T20&#xff0c;现…

在VS Code里逛知乎、发文章?知乎 on VS Code来啦!重新定义内容创作!

本文为 牛岱 的原创文章在2020年2月10日首发于“玩转VS Code”知乎专栏你是否已经厌倦了知乎 Web 端文本编辑器糟糕的使用体验和时而出现的奇怪 Bug&#xff1f;身为程序员的你是否想用你最熟悉的 Markdown 语法写答案&#xff0c;并且获得最佳的代码块语法高亮&#xff1f;攥写…

线性代数---向量问题的求解方法

线性代数—向量问题的求解方法 如果存在什么问题&#xff0c;欢迎批评指正&#xff01;谢谢&#xff01;