Prime算法 c实现 & 边的归并记录数组

最小生成树之prime算法 最小生成树:无向图中,所有边权之和最小的树。 阅读详情
#define INFINITY  2020;

typedef struct closedge //保存链接边的辅助的类型
{
 int adjvex;
 int lowcost; /*✿✿✿✿生成树到adjvex的距离为lowcost✿✿✿✿,当值为0时表示已经归并到了树中*/
} closedge;

int Prime()//图的最小生成树算法
{  

	int arr[8][8] = {{2020, 8, 2020, 4, 2020},  
					 {8, 2020, 7, 5, 12},  
					 {2020, 7, 2020, 11, 6},  
					 {4, 5, 11, 2020, 3},  
					 {2020, 12, 6, 3, 2020},  
					} ;

	 int u=1;/*从❤第二个❤顶点开始构造图的最小生成树*/
	 closedge closedge[5];
	 int  j,k,v,min;

	 for(j=0;j<5;j++)/*生成树与其他节点的最小距离数组初始化,其中5是顶点的个数*/
	 { closedge[j].adjvex=u;
	 closedge[j].lowcost=arr[u][j];/*初始化arr[1][j]*//*初始化({8, 2020, 7, 5, 12},)*/
	 }
	 closedge[u].lowcost=0;/*初始点,并入最小生成树*/
	 printf("%d->",u);
	
	 for(j=0;j<5-1;j++)/*5是顶点的个数,只需再运行四次,取四次树与节点的最小值,并入其他的四个点*/
	 {
	    min=2020;  
	 for(v=0;v<5;v++)/*关键:寻找最短的点*/
		 if(closedge[v].lowcost!=0 && closedge[v].lowcost<min)/*如果v点没有并入树,寻找距离最短的k点*/
		 {
		    min=closedge[v].lowcost;     k=v;
	     }
	 
		 closedge[k].lowcost=0;/*将顶点k并入U中*/
		 printf("%d->",k);

		 /*❤ k并入后,更新最短距离,修改closedge【n】中的各个元素的值 ❤ */
		 for(v=0;v<5;v++)
			 if(arr[v][k]<closedge[v].lowcost)
		     {
				 closedge[v].lowcost=arr[v][k];
				 closedge[v].adjvex=k;
			 }

      }
	
	printf("prime算法执行结束,以上为选择到当前树最近的顶点的序列\n");
	return 0;

}



 int main()
 {
	 Prime();printf("按任意键继续");int aaahhh=0;scanf("%d",&aaahhh); //防止运行完一闪而过return 0;
 }

#include<stdio.h>/*更详细的注释版*/
#include<string.h> 
#include<stdlib.h>
#define INFINITY  2020;

typedef struct closedge //保存链接边的辅助的类型
{
 int adjvex;
 int lowcost; /*✿✿✿✿生成树到adjvex的距离为lowcost✿✿✿✿,当值为0时表示已经归并到了树中*/
} closedge;
/*当不需要保存邻接边时,如只计算最小代价,可仅使用数组 int lowcost[];*//*也有算法多用了一个vset[]保存是否并入生成树,实际上用lowcost[]==0也能进行判断*/
int Prime()//图的最小生成树算法
{  

	int arr[8][8] = {{2020, 8, 2020, 4, 2020},  
					 {8, 2020, 7, 5, 12},  
					 {2020, 7, 2020, 11, 6},  
					 {4, 5, 11, 2020, 3},  
					 {2020, 12, 6, 3, 2020},  
					} ;

	 int u=1;/*从❤第二个❤顶点开始构造图的最小生成树*/
	 closedge closedge[5];
	 int  j,k,v,min;

	 for(j=0;j<5;j++)/*5是顶点的个数,生成树与其他节点的最小距离数组初始化*/
	 { closedge[j].adjvex=u;
	 closedge[j].lowcost=arr[u][j];/*初始化arr[1][j]*//*初始化({8, 2020, 7, 5, 12},)*/
	 }
	 closedge[u].lowcost=0;/*初始点,并入最小生成树*/
	 printf("%d",u);
	
	 for(j=0;j<5-1;j++)/*5是顶点的个数,只需再运行四次,取四次树与节点的最小值,并入其他的四个点*/
	 {
	    min=2020;  
	 for(v=0;v<5;v++)
		 if(closedge[v].lowcost!=0 && closedge[v].lowcost<min)/*如果v点没有并入树,寻找距离最短的k点*/
		 {
		    min=closedge[v].lowcost;     k=v;
	     }
	 
		 closedge[k].lowcost=0;/*将顶点k并入U中*/
		 printf("%d",k);

		 /*❤ k并入后,更新最短距离,修改closedge【n】中的各个元素的值 ❤ */
		 for(v=0;v<5;v++)
			 if(arr[v][k]<closedge[v].lowcost)
		     {
				 closedge[v].lowcost=arr[v][k];
				 closedge[v].adjvex=k;
			 }

      }
	
	printf("prime算法执行结束");
	return 0;

}

 int main()
 {
	 Prime();printf("*******"); int aaahhh=0;scanf("%d",&aaahhh); /*防止运行完一闪而过*/return 0;
 }

运行结果:
在这里插入图片描述
菜鸟教程在线编辑器

在这里插入图片描述

从南邮数据结构试卷看算法思想:不写代码,如何用伪代码和思路搞定Prime、快排和入度计算? 本文通过南邮数据结构真题,探讨如何在不编写代码的情况下,使用伪代码和结构化思维解决Prime算法、快速排序和入度计算等难题。文章详细介绍了伪代码结构化表达、自然语言分步拆解和可视化逻辑推演三种关键解题范式,帮助读者清晰展示算法内核,提升应试能力。 阅读详情

相关推荐

最小生成树prime算法

数据结构上最小生成树的prime算法,源代码是用c语言实现的,易于大家的理解。

c prime算法_干货|最小生成树-prime算法

作者:以上为参赛名单233链接:https://blog.nowcoder.net/n/fdbaa57696d1418fb502920ac4183729来源:牛客网Prime算法的核心步骤是:在带权连通图中V是包含所有顶点的集合, U已经在最小生成树中的节点,从图中任意某一顶点v开始,此时集合U={v},重复执行下述操作:在所有u∈U,w∈V-U的边(u,w)∈E中找到一条权值最小的边,将(u,w...

weixin_29661213的博客 604

C语言实现prim算法

C语言实现prim算法

prime算法求最小生成树——邻接矩阵(c语言详细代码)(附带案例)

此时将{0,3}这条边加入到存储最小生成树的数据结构中,将顶点3加入到已选集合中{0,3},未选集合为{2,4,5},这时横向边集合也发生了改变{{0,2},{0,1},{0,3},{3,7},{3,5},{3,4}}。Prime算法是切分定理的正向应用。首先选定一个顶点0,当选择一个顶点后就把它看成一个切分,一部分为已选顶点集合{0},另一部分为未选顶点集合{1,2,3,4,5}。其实很好理解,已选集合{0,2,3,4}中的{0,2}那条边已经没有机会再被选择了,他们内部已经构成了局部最小生成树了。

qq_62185081的博客 2695

Prim算法最小生成树(C语言)

输入数据: 7 11 A B 7 A D 5 B C 8 B D 9 B E 7 C E 5 D E 15 D F 6 E F 8 E G 9 F G 11 输出: A - D : 5 D - F : 6 A - B : 7 B - E : 7 E - C : 5 E - G : 9 Total:39

prime图论算法

prim算法,图论中的经典算法,可用于数据结构中图论的学习

prime算法c语言,最小生成树之prime算法C/C++

#include using namespace std;typedef char VertexType;typedef struct EdgeNode{int adjvex;int weight;struct EdgeNode *nextedge;}EdgeNode;typedef struct VNode{VertexType data;int visited;struct EdgeNode ...

weixin_39837352的博客 774

TortoiseSVN的安装与使用

TortoiseSVN的安装与应用1、安装1.1、下载TortoiseSVN    点击下载TortoiseSvn1.2、下载汉化包。上面的页面中,找到Chinese, simplified汉化包,点击32位或者64位的Setup,下载汉化包。1.3、安装TortoiseSVN。在选择安装路径页面时要记得勾选“command line client tools”,默认不是勾选的。这里不勾选的话在I...

qq_28566071的博客 4万+

Prim(普利姆)算法c语言实现

关于最小生成树的算法,那么肯定要提到大名鼎鼎的prim和kruskal算法, 这两种算法思想大同小异。对于算法的学习,我的经验是搞懂思想,分 模块去记忆,而不是去背代码,虽然短时间内,背代码确实可以较快的出程序,但是当算法非常多时,很容易混乱。 废话不多说,先说思想。 ##Prim算法:( 三步走) ...

一只懒猫的博客 4939

VScode中配置 C/C++ 环境,超级详细,问题分析全面,绝对好用

VScode中配置 C/C++ 环境,超级详细,问题分析全面,绝对好用 VScode中配置 C/C++ 环境 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 1. 下载编辑器VScode 1.官网:https://code.visualstudio.com/ 2. 安装VScode(建议附加任务全部勾选; 2. 下载编译器MinGW并解压 官网页面:https://www.mi

m0_46147064的博客 8万+

手把手教你使用ESM-2进行蛋白质结构预测:从安装到实战

本文详细介绍了如何使用ESM-2蛋白质语言模型进行蛋白质结构预测,从环境准备、模型安装到实战应用。通过逐步指导,读者可以掌握ESM-2的配置、单序列预测、结果可视化及高级优化技巧,适用于生物信息学研究和药物开发。

weixin_29306875的博客 532

从丑数到多路归并:算法竞赛中“谦虚数字”问题的核心解法与优化

在算法设计与问题求解中,有序序列的生成与合并是一个基础且重要的课题,其核心思想常围绕‘多路归并’展开。多路归并是一种高效处理多个有序输入流、按全局顺序输出元素的通用策略,其原理在于通过维护多个指针或使用优先队列(堆)动态选取最小值,从而避免了对整个搜索空间的无序遍历。该技术在工程实践中价值显著,能大幅提升诸如数据流合并、Top K查询等场景的性能。典型的应用场景包括求解‘丑数’及其变体问题——例如,给定一个质数集合,生成所有质因数仅来自该集合的递增序列(常被称为‘超级丑数’或‘谦虚数字’)。本文将以‘丑数’

weixin_34194087的博客 432

MATLAB功率谱函数psd与pwelch的使用

在网上看到 clear; Fs=1000; n=0:1/Fs:1; y=cos(2*pi*40*n)+3*cos(2*pi*100*n)+randn(size(n)); Nfft=1000; window=hanning(100); noverlap=20; dflag='none'; [Pxx,f]=psd(y,Nfft,Fs,window,noverlap); figure plot(f,10*log10(Pxx)); xlabel('frequency/Hz');ylab

qq_41687938的博客 2万+

动态规划解丑数问题:多路归并模板与代码实现详解

动态规划是解决最优化问题的核心算法范式,其核心原理在于将复杂问题分解为重叠子问题,并通过存储子问题的解来避免重复计算,从而提升效率。在算法与数据结构领域,动态规划的价值在于为许多组合生成与序列构造问题提供了系统性的高效解法。一个典型的应用场景是求解“丑数”序列——即只包含特定质因数(如2、3、5)的正整数。通过定义状态dp[i]为第i个丑数,并利用多个指针并行推进来生成候选值,可以抽象出一个通用的“多路归并”模板。该模板不仅高效解决了丑数问题,其思想还可直接迁移至超级丑数、光滑数等变体问题,体现了动态规划在

congji3817的博客 386

AIDD-人工智能药物设计-构建基于机器学习方法的在线预测平台高准确预测药物诱导骨毒性

在此基础上,提取多种药物分子特征,包括分子指纹(如MACCS、Morgan、RDKit、TopologicalTorsion、AtomPairs与Descriptors)及分子图谱,通过Transformer编码器与神经网络进行机器学习模型训练。最后,将训练好的模型部署为在线Web服务器(BoneToxPD),供用户快速预测药物的骨毒性。本研究不仅在骨毒性预测的准确性方面取得了突破,还在模型解释性方面提供了新的视角,通过注意力机制精准识别出影响骨毒性的关键化学基团,推动药物研发领域更安全、更高效的发展。

itwangyang520的博客 1079

fasterlio原理及代码框架梳理

Faster-LIO 的优势是在保持同等高精度的前提下,显著提升计算效率,以支持更极端的应用场景(如高速无人机)和更廉价的硬件平台。可以把 Faster-LIO 理解为用一把更快的“空间哈希筛子”(iVox)替换了原来精细的“动态平衡树”(ikd-Tree),从而在精度损失极小的情况下,实现了效率的显著提升。:只在实际有地图点的空间区域动态创建和保留体素单元,形成一个稀疏的体素地图。是关键:将去畸变点云中的每个点,在 iVox 维护的局部地图中搜索近邻(如5个最近点),构建点到面的距离残差。

Studying…… 246

动态规划解丑数问题:多指针归并思想与可复用模板详解

动态规划是一种通过将复杂问题分解为重叠子问题来高效求解的算法思想,其核心在于状态定义与状态转移。在序列生成类问题中,动态规划常与多指针技术结合,通过维护多个指针指向不同生成路径,每次选取最优值并更新状态,从而避免重复计算,显著提升效率。这种“多路归并”模式在工程实践中价值显著,尤其适用于需要按特定规则生成有序序列的场景,例如合并K个有序链表或生成超级丑数。本文以经典的丑数问题为切入点,深入剖析了如何运用多指针动态规划将质因数限定序列的生成过程模板化,并探讨了该模板在解决类似组合生成问题时的通用框架与变通方法

weixin_33933118的博客 976

美特CRM mcc_login.jsp存在SQL注入漏洞

MetaCRM 是一种现代化的客户关系管理(CRM)平台,旨在通过集成和自动化的方式帮助企业管理与客户的关系,提高销售和服务效率。MetaCRM 的功能和特性通常涵盖了多个领域,包括销售、营销、客户服务、数据分析和自动化工具。

缘梦未来的博客 808

丑数问题深度解析:从动态规划到多路归并的算法本质

动态规划是解决序列生成与组合优化问题的核心范式,其本质在于将复杂问题分解为重叠子问题,并通过状态转移高效求解。在有序序列生成场景中,多指针(或多路归并)技术常与动态规划结合,用于维护多个候选列表并选择当前最优解,从而避免重复计算。这一技术组合在解决‘数的组合’类问题上展现出巨大价值,例如生成质因数受限的递增数列。丑数问题正是该模式的经典体现:要求生成质因数仅包含2、3、5的递增序列。通过定义状态dp[i]为第i个丑数,并利用三个指针分别追踪乘以2、3、5的最小候选值,可以实现O(n)时间复杂度的动态规划解法

weixin_34221036的博客 368

AUTOSAR知识点 之 XCP (二):XCP基础概念

学习XCP的过程中,对XCP的基本概念要做一个全面的认知,因为里面有很多缩写以及难以理解的点,假设对此模模糊糊一知半解,那么对整个协议栈的认知会遇到极大的障碍。XCP的信号流传输图示如下XCP 标准主要分为 5 个部分:这部分提供了对于协议的一个概况介绍,包括 XCP 的功能和基础性内容。这部分内容对协议层进行了详细的规范和说明。

梦想技术家 2769

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Acwing 算法基础课(供个人复习)

摘要:本文介绍了图论和数学知识中的关键算法。图论部分包含邻接表/矩阵的存储方式,以及Dijkstra、Bellman-Ford、SPFA、Floyd等最短路径算法,Prim和Kruskal最小生成树算法,二分图判定和匈牙利算法。数学部分介绍了质数判定、区间质数筛选等数论知识。各算法均给出了核心思路和代码实现要点,涵盖了图论和基础数学的常见问题解决方法。

2302_76795740的博客 71

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

GESP认证C++编程真题解析 | 202409 五级

环形链表是一种适合的结构,因为它可以自然地循环遍历所有进程,当一个进程的时间片用完时,CPU可以迅速切换到下一个进程。本题中询问的是merge函数递归调用的次数,归并排序是一个分治算法,它将数组不断二分,直到每个子数组只有一个元素,即有n个子数组,合并过程中将这些数组两两合并直到合并成一个数组,排序完成,因此合并了n-1次,大约是。根据下述二分查找法,在排好序的数组1,3,6,9,17,31,39,52,61,79 中查找数值31,循环while (left <= right)执行的次数为( )。

团爸讲算法 1023

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

GESP认证C++编程真题解析 | 202506 五级

分治算法将问题分成多个子问题,分别解决子问题,最后合并子问题的解。该函数实现的是3n+1问题,r n依次变为7->22->11->34->17->52->26->13->40->20->10->5->16->8->4->2->1。若数n不能被2或3整除,则其除以6的余数不能是0、2、3、4,只能是1或5(例如5余1、7余1、11余5等),因此必然属于6k±1的形式,本题中,coins=[5,4,1], amount=8,贪心算法会给出5+1+1+1(4枚),但最优解是4+4(2枚),所以B选项错误。

团爸讲算法 1283

GESP认证C++编程真题解析 | 202512 八级

析构函数的调用顺序与构造函数相反:先调用派生类自己的析构函数,然后才调用基类的析构函数(如果有多个基类,顺序按继承列表从右到左)。堆优化的Dijkstra算法在更新相邻点的距离时,需要枚举每一条边,然后把这条边所到达的点入队。求两个序列的最长公共子序列(LCS)时,使用滚动数组优化空间后,仍然可以还原出具体的LCS序列。一个类可以有多个构造函数(即构造函数重载),根据参数列表的不同,可以定义不同的初始化方式。一个类只能有一个析构函数,析构函数没有参数、不能重载、也不能被显式调用,它的形式是固定的。

团爸讲算法 581

空间复杂度实战指南:从物理内存到7种降本增效技巧

空间复杂度是算法在真实硬件上运行时占用内存的量化描述,其本质由输入空间、辅助空间和执行开销三部分构成。它不仅关乎O(1)或O(n)的理论阶数,更直接影响栈溢出、OOM崩溃、GC压力与缓存效率等工程问题。尤其在嵌入式、边缘计算、FaaS和实时流处理等资源受限场景中,微小的空间失控可能引发服务雪崩。本文结合Python内存模型、递归栈帧、哈希表底层分配、缓存行对齐等关键技术细节,系统解析空间行为的物理根源,并提供滚动数组、位运算压缩、生成器、内存映射等7种可立即落地的优化手段,帮助工程师在编码第一行就预判并控制

weixin_34122810的博客 375

算法竞赛核心技巧:从问题识别到工程优化的实战指南

算法是计算机科学的核心基础,它通过明确的步骤解决特定问题。其原理在于将复杂问题分解为可管理的子问题,运用数据结构与数学思维进行优化。掌握算法能够显著提升程序效率,在搜索引擎、推荐系统、路径规划等场景中发挥关键作用。动态规划和图论算法作为经典解决方案,在CACC等算法竞赛中尤为重要。本文基于竞赛实战经验,深入解析如何识别问题模式、选择合适算法,并探讨Dijkstra、动态规划等技术的工程实现细节与优化策略,帮助开发者构建系统的算法思维体系。

ckkay800264的博客 375
上一篇: 二叉排序树与插入删除操作
下一篇: 一般的n阶范德蒙行列式计算的两个主要步骤
FakeOccupational
博客等级 码龄6年 2万+粉丝 1727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值