数据结构---prim最小生成树
数据结构—prim最小生成树
原理:参考趣学数据结构
代码:
#include<stdio.h>
#include<stdlib.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)
bool 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 print15(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");}
}
void prim(GraphMatrix G, int u0) {//最小生成树int lowcost[N], closeV[N];for (int i = 0; i < G.vNum; i++) {//初始化lowcost[i] = G.vNode[u0][i];closeV[i] = u0;if (u0 == i) {lowcost[u0] = 0;}}visited[u0] = true;printf("%d ", u0);for (int k = 0; k < G.vNum - 1; k++) {//最小生成树 顶点数-1条边int t = u0, Temp = INF;for (int i = 0; i < G.vNum; i++) {//寻找连接两个集合最短边(已经访问和未被访问)if (!visited[i] && Temp > lowcost[i]) {Temp = lowcost[i];t = i;}}if (t == u0) {break;}visited[t] = true;printf("%d ", t);for (int i = 0; i < G.vNum; i++) {//因为新结点的加入,可能会缩短两个顶点集合之间的距离,更新操作if (!visited[i]&&G.vNode[t][i] < lowcost[i]) {lowcost[i] = G.vNode[t][i];closeV[i] = t;}}}printf("\n哪些边有关系:\n");for (int i = 0; i < G.vNum; i++) {if (i != u0) {printf("%d---%d有边\n", i, closeV[i]);}}
}
int main() {GraphMatrix G;initGMaxtix(G);print15(G);printf("\n");for (int i = 0; i < G.vNum; i++) {visited[i] = false;}printf("prim最小生成树\n");prim(G, 0);printf("\n");system("pause");return 0;
}
测试截图:
时间复杂度O(n x n),空间复杂度O(n)
如果存在什么问题,欢迎批评指正!谢谢!
数据结构---prim最小生成树相关推荐
- 技术图文:如何利用C# 实现 Prim 最小生成树算法?
背景 我们上一篇图文介绍了 如何利用 C# 实现 Kruskal 最小生成树算法?,Kruskal 算法通过寻找边最优的方式来构造最小生成树,本篇图文介绍如何利用 C# 实现 Prim 最小生成树算法 ...
- 基于C++的带权无向图的实现 (三)- Prim最小生成树算法
该系列文章是本人整理的有关带权无向图的数据结构和算法的分析与实现,若要查看源码可以访问我的github仓库,如有问题或者建议欢迎各位指出. 目录 基于C++的带权无向图的实现 (一)- 数据结构 基于 ...
- 【数据结构】 最小生成树(四)——利用kruskal算法搞定例题×3+变形+一道大水题...
在这一专辑(最小生成树)中的上一期讲到了prim算法,但是prim算法比较难懂,为了避免看不懂,就先用kruskal算法写题吧,下面将会将三道例题,加一道变形,以及一道大水题,水到不用高级数据结构,建 ...
- 数据结构---Kruskal最小生成树
数据结构-Kruskal最小生成树 原理:参考趣学数据结构 代码: 快速排序: #pragma once #define elemType int typedef struct vER {elemTy ...
- 数据结构之最小生成树
prime算法 普里姆(Prim)算法,是用来求加权连通图的最小生成树的算法. 基本思想 对于图G而言,V是所有顶点的集合:现在,设置两个新的集合U和T,其中U用于存放G的最小生成树中的顶点,T存放G ...
- prim最小生成树算法原理
prim 最小生成树算法原理 主要需要了解算法的原理.算法复杂度.优缺点 .刻画和度量指标 评价等 可以查阅相关的文献,这部分内容主要整合了两篇博客的内容 分别是:http://blog.csdn.n ...
- 【数据结构】最小生成树 Prim算法 Kruskal算法
最小生成树应用场景: 假设以下场景,有一块木板,板上钉上一些钉子,这些钉子可以由一些细绳连接起来.假设每个钉子可以通过一根或者多根细绳连接起来,那么一定存在这样得情况,即用最少的细绳把所有的钉子连接起 ...
- 【数据结构】最小生成树(Prim算法,普里姆算法,普利姆)、最短路径(Dijkstra算法,迪杰斯特拉算法,单源最短路径)
文章目录 前置问题 问题解答 一.基础概念:最小生成树的定义和性质 (1)最小生成树(Minimal Spanning Tree)的定义 (2)最小生成树(MST)的性质 二.如何利用MST性质寻找最 ...
- POJ 2485 Highways (prim最小生成树)
对于终于生成的最小生成树中最长边所连接的两点来说 不存在更短的边使得该两点以不论什么方式联通 对于本题来说 最小生成树中的最长边的边长就是使整个图联通的最长边的边长 由此可知仅仅要对给出城市所抽象出的 ...
最新文章
- React学习笔记1:React基本概念
- UA OPTI512R 傅立叶光学导论11 卷积的性质
- python数据帧_Python数据帧
- 树莓派hdmi输出没声音_树莓派 4 开箱记
- 深入探讨!Batch 大小对训练的影响
- R绘图 vs Python绘图(散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图)
- 23种设计模式详解_太厉害了,清华大牛一个坦克项目就把23种设计模式给抽丝剥茧了...
- matlab mtime,matlab中的视频分析工具箱 提供matlab中的视频分析工具 - 下载 - 搜珍网...
- python程序的运行速度在所有计算机语言中最快_【编程专题】实测四种编程语言的运算速度,最快的竟然是它!...
- iOS获取音频设备信息
- 大数据笔记_Hadoop基础知识
- notepad++弹出菜单
- 平板集热器的集热量和热效率计算的Python程序
- et200sp系统服务器模块,ET200SP GSD文件组态时服务器模块的选择方法
- android timepicker 设置颜色,android TimePicker 踩过的坑 颜色设置
- 拍牌(沪牌)软件,开源全部代码。有精力可以自己研究然后自用拍牌
- 【MATLAB】求解约束条件下的目标函数最值(fmincon用法解析)
- LeetCode 1278. 分割回文串 III
- (附源码)计算机毕业设计高校教务管理系统
- Mac平面设计师必备软件,懂word就会设计,内置海量模板。
热门文章
- Android之在window下面开发常用的adb命令(不断更新)
- Android之判断手机黑屏以及锁屏
- 你知道出现“乱码”的原因是什么吗?(4)
- bat从数组中找出相同数字并删除_找到所有数组中消失的数字
- 圆的面积公式的巧妙推导
- 被一帮小姐姐围着是什么感觉?
- 除了PS,原来这个也可以轻松实现图像处理!
- 程序员上帝视角解读“旅行青蛙”,你的呱真的在旅行嘛?
- stm32l0的停止模式怎么唤醒_「正点原子STM32Mini板资料连载」第十九章 待机唤醒实验...
- linux windows多任务,windows是多用户多任务系统吗?