迪杰斯特拉算法——C语言

迪杰斯特拉算法是一种用于在图中寻找节点之间最短路径的算法。它常用于路由以及其他图算法的子过程。

假设我们输入的是0顶点:

        第一步,先寻找距离最小的顶点,这也是我们找到的第一个顶点,也就是顶点1,因为其他顶点距离一定大于12(未连接的顶点一定大于12,因为需要中转)。

        第二步,把最近顶点作为中转点(顶点1)标记已访问,遍历其他未访问顶点,更新到顶点0 的距离(将顶点1作为中转点更新距离)。

        第三步,重复第一步和第二步。

我们可以写出类似于这样的代码:

void Dijkstra(Graph* G,int index) {开辟访问未访问数组开辟距离顶点index距离数组for (int i = 0; i < G->vexsNum; i++) {初始化两个数组}for (int a = 0; a < G->vexsNum - 1; a++) {找到最小距离的顶点标记已访问for (int j = 0; j < G->vexsNum; j++) {if (未访问 && 经过中转点的距离 < 距离数组的距离) {更新距离}}}}

寻找最小距离顶点的代码如下:

int GetMin(Graph* G,int* S,int* D) {int min = Max;int index;for (int i = 0; i < G->vexsNum;i++) {if (S[i] == 0 && D[i] > 0) {if (min > D[i]) {min = D[i];index = i;}}}return index;
}

 接下来是迪杰斯特拉算法的代码:

void Dijkstra(Graph* G,int index) {int* S = (int*)malloc(sizeof(int) * G->vexsNum);int* D = (int*)malloc(sizeof(int) * G->vexsNum);for (int i = 0; i < G->vexsNum; i++) {if (i == index) {S[i] = 1;}else{S[i] = 0;}D[i] = G->arcs[index][i];}for (int a = 0; a < G->vexsNum - 1; a++) {index = GetMin(G, S, D);S[index] = 1;for (int j = 0; j < G->vexsNum; j++) {if (S[index] != 0 && D[index] + G->arcs[index][j] < D[j]) {D[j] = D[index] + G->arcs[index][j];}}}}

初始化将输入顶点标记为1,未访问顶点标记为0。

        我们可以模拟顶点1为中转点的情况,这时连接顶点2 的距离就由Max变为12+10=22。其他结果都不变。

 

        然后接着寻找最小顶点顶点6(顶点1已经访问过了),这时顶点6 作为中转点,连接顶点4 的距离就由Max变为14+8=22。其他结果不变。

 

        现在接着寻找最小顶点顶点5,依次类推。

最后结果如下:

这就是文章的全部内容了,希望对你有所帮助,如有错误欢迎指出。

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

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

相关文章

转型AI产品经理(4):“认知负荷”如何应用在Chatbot产品

认知负荷理论主要探讨在学习过程中&#xff0c;人脑处理信息的有限容量以及如何优化信息的呈现方式以促进学习。认知负荷定律认为&#xff0c;学习者的工作记忆容量是有限的&#xff0c;而不同类型的认知任务会对工作记忆产生不同程度的负荷&#xff0c;从而影响学习效果。以下…

最短路径Dijkstra算法详解

目录 最短距离问题 最短路径问题 进阶--标尺增多 升级方法 例题应用 最短距离问题 Dijkstra算法的策略&#xff1a; 设置集合S存放已被访问的顶点&#xff0c;然后执行n次下面的两个步骤&#xff08;n为顶点个数&#xff09;&#xff1a; &#xff08;1&#xff09;每次…

Django框架中Ajax GET与POST请求的实战应用

系列文章目录 以下几篇侧重点为JavaScript内容0.0 JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;上&#xff09;JavaScript入门宝典&#xff1a;核心知识全攻略&#xff08;下&#xff09;Django框架中Ajax GET与POST请求的实战应用VSCode调试揭秘&#xff1a;L…

Nginx05-负载均衡详解、LNMP+NFS、会话保持、负载均衡状态检查upstream-check、平滑升级

目录 写在前面Nginx05Nginx 负载均衡&#xff08;upstream模块&#xff09;概述常见选择负载均衡和反向代理的区别Nginx负载均衡的方式Nginx运行状况检查备份服务器Nginx upstream模块选项说明 实验1 负载均衡两台frontfront配置lb01配置测试流程梳理 实验2 LNMPNFS小实验NFS配…

SpringBoot内置数据源

回顾: 在我们之前学习在配置文件当中配置对应的数据源的时候, 我们设置的数据源其实都是Druid的数据源, 并且其配置有两种方式, 当然这两种方式都需要我们导入对应的有关 德鲁伊 的依赖才行 一种是直接在开始设置为 druid 数据源类型的一种是在对应的正常的数据库配置下, 设置…

用户管理与服务器远程管理

用户管理 服务器系统版本介绍 windows服务器系统&#xff1a;win2000 win2003 win2008 win2012 linux服务器系统&#xff1a;Redhat Centos 用户管理 用户概述 &#xff08;1&#xff09;每一个用户登录系统后&#xff0c;拥有不同的操作权限。 &#xff08;2&#xff09;…

【C++课程学习】:类和对象(拷贝构造和运算符重载)

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;C课程学习 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 目录 ✍拷贝构造&#xff1a; &#x1f349;特点一&#xff1a; &#x1f349;特点二&#xff1a; &…

气膜建筑在体育和娱乐行业的多样化应用—轻空间

随着人们生活水平的提高和健康意识的增强&#xff0c;体育和娱乐行业的发展迎来了新的机遇和挑战。气膜建筑&#xff0c;作为一种新型建筑技术&#xff0c;因其独特的优势和广泛的应用场景&#xff0c;正在引领体育和娱乐行业的新潮流。 快速建设高品质体育场馆 气膜建筑以其快…

接口幂等性设计(5 大方案罗列)

结合案例、列举场景的接口幂等性设计方案。 方案 1. 状态机 业务场景&#xff0c;数据审核成功后进行短信通知&#xff0c;或者是订单状态变成已支付后&#xff0c;短信通知用户订单生成的详细信息&#xff0c;等等和状态有关的操作。 假设 status&#xff1a;0&#xff08;待…

基于遗传优化算法的风力机位置布局matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于遗传优化算法的风力机位置布局matlab仿真&#xff0c;风力机位置布局优化是风能转换系统设计中的一个重要环节&#xff0c;旨在最大化风场的整体发电效率。仿…

创建 MFC DLL-使用关键字_declspec(dllexport)

本文仅供学习交流&#xff0c;严禁用于商业用途&#xff0c;如本文涉及侵权请及时联系本人将于及时删除 从MFC DLL中导出函数的另一种方法是在定义函数时使用关键字_declspec(dllexport)。这种情况下&#xff0c;不需要DEF文件。 导出函数的形式为&#xff1a; declspec(dll…

《书生·浦语大模型实战营》第4课 学习笔记:XTuner 微调 LLM:1.8B、多模态、Agent

文章大纲 1. 大模型微调简介2 快速上手2.1 环境安装2.2 前期准备2.2.1 数据集准备2.2.2 模型准备2.2.3 配置文件选择2.2.4 小结 2.3 配置文件修改2.4 模型训练2.4.1 常规训练2.4.2 使用 deepspeed 来加速训练2.4.3 训练结果2.4.4 小结 2.5 模型转换、整合、测试及部署2.5.1 模型…

[大模型]LLaMA3-8B-Instruct WebDemo 部署

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器&#xff0c;如下图所示镜像选择 PyTorch-->2.1.0-->3.10(ubuntu20.04)-->12.1 接下来打开刚刚租用服务器的 JupyterLab&#xff0c;并且打开其中的终端开始环境配置、模型下载和运行 demo。 pip 换源…

FreeRTOS学习笔记-基于stm32(14)内存管理

一、FreeRTOS 内存管理简介 FreeRTOS有两种方法来创建任务&#xff0c;队列&#xff0c;信号量等&#xff0c;一种动态一种静态。静态方法需要手动定义任务堆栈。使用动态内存管理的时候 FreeRTOS 内核在创建任务、队列、信号量的时候会动态的申请 RAM。 我们在移植FreeRTOS时可…

6.结构体

目录 一、普通结构体&#xff08;struct&#xff09;1.1 说明1.2 举例1&#xff09;结构体定义及访问2&#xff09;结构体初化的简单写法3&#xff09;结构体更新语法 二、元组结构体&#xff08;tuple struct&#xff09;2.1 概念2.2 示例 三、类单元结构体&#xff08;unit-l…

安全智能预警软件有人试图窃取会立即发出高分贝警报已解锁VIP功能

一款手机安全智能预警软件&#xff0c;无论是网吧还是餐馆小聚&#xff0c;您的手机都能得到贴心的守护&#xff0c;一旦有人试图窃取&#xff0c;应用会立即发出高分贝警报&#xff0c;确保您在公交、地铁、商场等拥挤环境中依然能牢牢掌控手机。&#xff08;解锁专业版&#…

【调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新】

调试笔记-系列文章目录 调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 文章目录 调试笔记-系列文章目录调试笔记-20240611-Linux-配置 OpenWrt-23.05 支持泛域名 acme 更新 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调…

Go使用https

一、服务端 1. 生成私钥和证书 安装OpenSSL windows安装OpenSSL生成CA证书创建证书 以上两个步骤&#xff0c;参考&#xff1a;Go http2 和 h2c 2. 代码 package mainimport ("log""net/http""time""golang.org/x/net/http2" )co…

大语言模型QA

Q:关于 Yi-9B 通过 input/output cosine 来分析模型,可能文档里没有把前提说明白。该指标确实存在你们提到的不同模型大小不可比的问题。所以我们比较的是同一个模型在不同训练阶段,以及 layer 深度相同的dense models 之间的比较。除了发现yi-6B/34B 随着训练 tokens 的增加…

Qt | openSSL将TCP数据进行不对称(RSA)加密传输-windows平台实操(可行)

01、windows平台工具准备 QtQt5.14.2openSSL下载(选择适合自己的版本即可)https://slproweb.com/products/Win32OpenSSL.htmlTCP调试助手调试助手02、简介 首先简单介绍一下openssl。接着描述如何在windo