一,prim算法逻辑

1.理解:克鲁斯卡尔算法关注的是边,普里姆算法关注的是点

把图中每个顶点比作孤岛,点亮一座孤岛就可以解锁附近的孤岛

每次解锁的点都是离自身最近的点

 2.普里姆算法流程

a.采用邻接矩阵表示,考虑要查找最小值,初始化不存在的边的值为INF

b.准备工作

cost边的权值数组,保存到该条边的权值

mark标记已访问的点

visit从哪个顶点访问过来的

c.执行操作

任意找到一个激活点,更新三个数组

从cost数组找到权值最小的顶点,激活该顶点

在边集数组中保存visit和当前节点的编号,以及权值

重复c操作

二,代码实现

1.头文件中的接口

//
// Created by 27893 on 2025/8/1.
//#ifndef PRIM_H
#define PRIM_H
#include "common.h"
#include "../MatrixGraph/MatrixGraph.h"int primMGraph(MGraph*graph,int startV,EdgeSet*result);
#endif //PRIM_H
//
// Created by 27893 on 2025/8/1.
//#ifndef COMON_H
#define COMON_H
typedef struct {int begin;int end;int weight;
}EdgeSet;
#endif //COMON_H

2.将头文件中的接口一一实现

//
// Created by 27893 on 2025/8/1.
//#include <stdio.h>
#include <stdlib.h>
#include "Prim.h"int primMGraph(MGraph *graph, int startV, EdgeSet *result) {int*cost=malloc(sizeof(int)*graph->nodeNum);int*mark=malloc(sizeof(int)*graph->nodeNum);int*visit=malloc(sizeof(int)*graph->nodeNum);if (cost==NULL||mark==NULL||visit==NULL) {return 0;}int sum=0;//初始化激活startvfor (int i=0;i<graph->nodeNum;i++) {cost[i]=graph->edges[startV][i];mark[i]=0;if (graph->edges[startV][i]<INF) {visit[i]=startV;}else {visit[i]=i;}}mark[startV]=1;for (int i=0;i<graph->nodeNum-1;i++) {//1.在cost找到最小值int k=0,mini=INF;for (int j=0;j<graph->nodeNum;j++) {if (mark[j]==0&&cost[j]<mini) {mini=cost[j];k=j;}}//2.更新边集数组result[i].begin=visit[k];result[i].end=k;result[i].weight=mini;mark[k]=1;sum+=mini;//3.更新cost数组for (int j=0;j<graph->nodeNum;j++) {if (mark[j]==0&&graph->edges[k][j]<cost[j]) {cost[j]=graph->edges[k][j];visit[j]=k;}}}free(cost);free(mark);free(visit);return sum;
}

3,测试是否有bug

//
// Created by 27893 on 2025/7/31.
//
#include <stdio.h>
#include <stdlib.h>#include "Kruskal.h"
#include "Prim.h"void setupMGraph01(MGraph *graph, int edgeValue) {const char *names[] = {"A", "B", "C", "D", "E", "F", "G"};initMGraph(graph, names, 7, 0, edgeValue);addMGraph(graph, 0, 1, 12);addMGraph(graph, 0, 5, 16);addMGraph(graph, 0, 6, 14);addMGraph(graph, 1, 2, 10);addMGraph(graph, 1, 5, 7);addMGraph(graph, 2, 3, 3);addMGraph(graph, 2, 4, 5);addMGraph(graph, 2, 5, 6);addMGraph(graph, 3, 4, 4);addMGraph(graph, 4, 5, 2);addMGraph(graph, 4, 6, 8);addMGraph(graph, 5, 6, 9);
}
void test01() {MGraph graph;EdgeSet*edges;int num;EdgeSet*result;int sumweight;setupMGraph01(&graph,0);edges=malloc(sizeof(EdgeSet)*graph.edgeNum);num=initEdgeSet(&graph,edges);printf("edges num:%d\n",num);sortEdgeSet(edges,num);result=malloc(sizeof(EdgeSet)*graph.nodeNum-1);sumweight=kruskalMGraph(&graph,edges,num,result);printf("sumweight:%d\n",sumweight);for (int i=0;i<graph.nodeNum-1;i++) {printf("edges[%d]:%s----%d----%s\n",i+1,graph.vex[result[i].begin].show,result[i].weight,graph.vex[result[i].end].show);}
}
void test02() {MGraph graph;setupMGraph01(&graph,INF);EdgeSet*result;result=malloc(sizeof(EdgeSet)*(graph.nodeNum-1));int sum=primMGraph(&graph,0,result);printf("sumWeight:%d\n",sum);for (int i=0;i<graph.nodeNum-1;i++) {printf("edges[%d]:%s----%d----%s\n",i+1,graph.vex[result[i].begin].show,result[i].weight,graph.vex[result[i].end].show);}
}
int main() {test01();test02();return 0;
}

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

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

相关文章

嵌入式学习之硬件——51单片机 1.0

一、基础知识1.什么是嵌入式&#xff1f;嵌入式以应用为中心&#xff0c;计算机技术为基础&#xff0c;软硬件可裁剪的专用计算机系统&#xff1b;2.嵌入式的应用&#xff1f;消费电子、无人驾驶、储能、新能源........3.嵌入式发展&#xff1f;&#xff08;1&#xff09;第一阶…

51c大模型~合集161

自己的原文哦~ https://blog.51cto.com/whaosoft/14079111 #这家国内公司&#xff0c;在给xx智能技术栈做「通解」 打通机器人智能化的关键&#xff1a;眼脑手。 xx智能&#xff08;Embodied Intelligence&#xff09;是 AI 领域里热度极高的赛道&#xff1a;给大模型…

Linux9 root密码修改

开机按e进入在linux行即quiet后面输入rd.break ctrlx进入内核输入mount -o remount,rw /sysrootchroot /sysrootpasswd root即可修改密码输入touch /.autorelabelexitexit等待即可

提示词增强工程(Prompt Enhancement Engineering)白皮书草稿

提示词增强工程&#xff08;Prompt Enhancement Engineering&#xff09;白皮书草稿 作者&#xff1a; 技术人进化社 Email&#xff1a;2819699195qq.com 日期&#xff1a; 2025年7月30日 1. 引言 随着大型语言模型&#xff08;LLM&#xff09;能力的飞速发展&#xff0c;如何高…

电路元器件

电流单位 电压 电阻单位 电阻的决定式 欧姆定律 交流电和直流电 交流电 串联电路 并联电路 在线模拟器 Circuitjs web 在线电路模拟器 下载

广泛分布于内侧内嗅皮层全层的速度细胞(speed cells)对NLP中的深层语义分析的积极影响和启示

速度细胞&#xff08;Speed Cells&#xff09;作为内侧内嗅皮层&#xff08;MEC&#xff09;的核心神经元&#xff0c;通过编码运动速度信息与网格细胞协同实现动态路径整合。这一神经机制为自然语言处理&#xff08;NLP&#xff09;的深层语义分析提供了以下关键启示和影响&am…

sql中的多表查询

在SQL中&#xff0c;多表查询用于从多个表中组合数据&#xff0c;常见的方法包括 ​连接查询&#xff08;JOIN&#xff09;​​ 和 ​子查询。以下是详细说明和示例&#xff1a;一、连接查询&#xff08;JOIN&#xff09;通过关联字段将多个表的数据合并&#xff0c;分为以下几…

Ruby 面向对象编程深入解析

Ruby 面向对象编程深入解析 引言 Ruby 作为一种动态、解释型、面向对象的语言,自1995年由日本程序员Yukihiro Matsumoto创造以来,凭借其简洁、灵活和强大的面向对象特性,在全球范围内获得了广泛的认可。本文将深入探讨Ruby的面向对象编程(OOP)特性,帮助读者更好地理解和…

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现围栏羊驼的检测识别(C#代码,UI界面版)

Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现围栏羊驼的检测识别&#xff08;C#代码&#xff0c;UI界面版&#xff09;工业相机使用YoloV8模型实现围栏羊驼的检测识别工业相机通过YoloV8模型实现围栏羊驼的检测识别的技术背景在相机SDK中获取图像转换图像的代码分…

如何利用 rowid 在OceanBase 中处理大表时提效

本文作者&#xff1a;张瑞远&#xff0c;现主要从事电信级IT系统及数据库的规划设计、架构设计、运维实施、运维服务、故障处理、性能优化等工作&#xff0c;曾经从事银行、证券数仓设计、开发、优化类工作&#xff0c;持有Orale OCM,MySQL OCP及国产代表数据库认证。 获得包括…

【从0开始学习Java | 第4篇】类和对象

文章目录&#x1f44f;类和对象的概念什么是类&#xff1f;什么是对象&#xff1f;&#x1f95d;构造方法如何创建一个对象&#xff1f;&#x1f95d;对象内存布局完整应用 - 编写一个类&#xff1a;人&#xff0c;其具备年龄、性别、姓名等基础属性&#xff0c;并实例化一个人…

Synopsys:默认报告精度(report_default_significant_digits变量)

相关阅读 Synopsyshttps://blog.csdn.net/weixin_45791458/category_12812219.html?spm1001.2014.3001.5482 在使用report_timing之类的报告命令时&#xff0c;可以使用-significant_digits选项指定报告的精度&#xff0c;在不使用该选项的情况下&#xff0c;命令使用由repor…

2025年蓝桥杯青少图形化编程国考真题——摆放玩具

编程实现摆放玩具。&#xff08;角色非源素材&#xff09;摆放规则&#xff1a;在方格中摆放玩具&#xff0c;每个方格只能摆放一个&#xff0c;并且如果某个方格中已经摆放了玩具&#xff0c;那么与之上、下、左、右相邻的四个方格中无法再摆放同种玩具。具体要求1&#xff09…

Android 应用的安装流程

安装流程总览&#xff1a; 用户触发安装->系统验证APK的合法性->解析APK元数据->检查权限和存储空间->复制APK到目标位置->生成应用私有数据->注册组件到系统->安装完成 关键步骤&#xff1a; 1.用户触发安装&#xff1a;a.通过应用商店b.通过adb命令c.通…

基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案:从扫描件提取到数据入库全流程实践

基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案&#xff1a;从扫描件提取到数据入库全流程实践 文章目录基于 Amazon Bedrock 与 Anthropic Claude 3 智能文档处理方案&#xff1a;从扫描件提取到数据入库全流程实践方案架构前提准备&#xff1a;亚马逊云科技注册…

深入浅出设计模式——创建型模式之单例模式 Singleton

文章目录“天上天下&#xff0c;唯我独尊”——单例模式单例模式简介单例模式结构饿汉式懒汉式客户端示例运行结果单例模式总结构建型模式 Creational Patterns 小结 Summary代码仓库“天上天下&#xff0c;唯我独尊”——单例模式 你能在电脑上调出两个Windows任务管理器吗&a…

静电释放检测漏报率↓85%!陌讯多模态融合算法在电子厂ESD防护实战解析

​摘要​​ 基于边缘计算的静电释放(ESD)视觉检测方案&#xff0c;通过多模态融合技术显著提升复杂场景鲁棒性。实测显示&#xff1a;在电子元件装配线上&#xff0c;ESD事件检测mAP0.5达89.1%&#xff0c;较基线模型提升28.3%。一、行业痛点&#xff1a;ESD检测的隐形危机根据…

RAL-2025 | “藏宝图”驱动的具身导航!HAM-Nav:基于手绘地图引导的机器人导航

作者&#xff1a;Aaron Hao Tan, Angus Fung, Haitong Wang, Goldie Nejat单位&#xff1a;多伦多大学机械与工业工程系论文标题&#xff1a;Mobile Robot Navigation Using Hand-Drawn Maps: A Vision Language Model Approach出版信息&#xff1a;IEEE ROBOTICS ANDAUTOMATI…

Vue.js 与后端技术结合开发指南

Vue.js 作为现代化的前端框架&#xff0c;可以与多种后端技术完美结合&#xff0c;构建全栈应用。下面我将详细介绍 Vue 可以与哪些后端技术结合开发&#xff0c;并提供可视化示例。Vue 可结合的后端技术概览主流组合方案对比后端技术适合场景优点缺点学习曲线Node.js全栈JavaS…

逻辑回归在银行贷款审批中的应用:参数选择与实践

目录 一、数据背景与预处理 1.数据前五行 2.数据预处理步骤 二、逻辑回归的正则化参数选择 1.交叉验证选择最优C 2.为什么选择召回率作为评估指标&#xff1f; 三、参数选择的核心结论 四、后续优化方向 在银行贷款审批场景中&#xff0c;准确判断贷款人是否符合贷款条…