迪杰斯特拉算法 代码

参考链接:

【路径规划】全局路径规划算法——Dijkstra算法(含python实现 | c++实现)-CSDN博客 

 算法图解:

代码

def dijkstra(matrix, source):"""迪杰斯特拉算法实现Args:matrix (_type_): 用邻接矩阵表示带权图source (_type_): 起点Returns:_type_: 最短路径的节点集合,最短路径的节点的最短距离,每个节点到起点的最短路径"""INF = float('inf')n = len(matrix)m = len(matrix[0])assert n == m, "Error, please examine matrix dim"assert source < n, "Error, start point should be in the range!"S = [source]        # 已找到最短路径的节点集合   S:可以缩写为"SP",代表"Shortest Path"(最短路径)。U = [v for v in range(n) if v not in S]  # 记录还未确定最短路径的节点集合  U:可以缩写为"UNP",代表"Unprocessed Nodes"(未处理的节点)。distance = [INF] * n          # source到已找到最短路径的节点的最短距离distance[source] = 0  # 起点到自己的距离path_optimal = [[]]*n           # source到其他节点的最短路径path_optimal[source] = [source]while len(S) < n:   # 当已找到最短路径的节点小于n时min_value = INFcol = -1row = -1for s in S:     # 以已找到最短路径的节点所在行为搜索对象for u in U:   # 从U中搜索尚未记录的节点if matrix[s][u] + distance[s] < min_value:  # 找出最小值# 在某行找到最小值要加上source到该行的最短路径min_value = matrix[s][u] + distance[s]row = s         # 记录所在行列col = uif col == -1 or row == -1:  # 若没找出最小值且节点还未找完,说明图中存在不连通的节点breakS.append(col)  # 在S中添加已找到的节点U.remove(col)  # 从U中移除已找到的节点distance[col] = min_value # source到该节点的最短距离即为min_valuepath_optimal[col] = path_optimal[row][:]    # 复制source到已找到节点的上一节点的路径path_optimal[col].append(col)       # 再其后添加已找到节点即为source到该节点的最短路径return S, distance, path_optimaldef main():INF = float('inf')# 使用邻接矩阵存储图# A B C D E F Gmatrix = [[0, 12, INF, INF, INF, 16, 14],[12, 0, 10, INF, INF, 7, INF],[INF, 10, 0, 3, 5, 6, INF],[INF, INF, 3, 0, 4, INF, INF],[INF, INF, 5, 4, 0, 2, 8],[16, 7, 6, INF, 2, 0, 9],[14, INF, INF, INF, 8, 9, 0]]S, distance, path_optimal = dijkstra(matrix, 3)print('S:')print(S)print('distance:')print(distance)print('path_optimal:')for p in path_optimal:print(p)if __name__ == '__main__':main()

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

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

相关文章

SpringBoot(源码解析 + 实现底层机制)

文章目录 1.搭建SpringBoot底层机制开发环境1.创建maven项目2.使用Git管理项目&#xff08;可以略过&#xff09;1.创建一个github存储库2.克隆到本地&#xff0c;复制文件夹的内容3.粘贴到idea项目文件夹&#xff0c;将其作为本地仓库与远程仓库关联 3.pom.xml 引入父工程和场…

AI壁纸号一周增加上千粉丝,轻松变现的成功案例分享

前言 随着AI绘画技术的发展&#xff0c;传统的互联网副业壁纸号在新的技术加持下迎来了第二春。本文将分享一位壁纸号创作者的成功案例&#xff0c;并为大家提供创作门槛和硬件要求等相关信息。 该项目的创作门槛极低&#xff0c;基本上可以由AI完成内容创作。不过&#xff0…

LM358P/LM358DR/LM358DT/LM358DR2G运算放大器中文资料PDF数据手册引脚图功能

产品概述&#xff1a; LM358B 和 LM2904B 器件是行业标准运算放大器 LM358 和 LM2904 的下一代版本&#xff0c;其中包括两个高压 (36V) 运算放大器。这些器件为成本敏感型应用提供了卓越的价值&#xff0c;其特性包括低偏移&#xff08;300V&#xff0c;典型值&#xff09;、…

C++11新特性【右值引用】

文章目录 1. 什么是左值2. 什么是右值3. 左值引用4. 左值引用使用场景5. 右值引用6. 右值引用使用场景6.1 场景16.2 场景2 7. 完美转发 1. 什么是左值 左值不能根据字面意思来理解&#xff0c;不是说在左边的就是左值&#xff0c;例如&#xff1a; int main() {int a 0;int …

Windows11安装NodeJS18并配置环境变量

从官网下载&#xff0c;或者从百度网盘下载 解压下载的zip包&#xff1a; 重命名为nodejs&#xff1a; 在nodejs中添加cache和global两个目录&#xff1a; 将nodejs和nodejs\global添加到环境变量&#xff1a; 打开终端&#xff0c;输入&#xff1a; node -v接着配置…

高效备考2024年AMC10:吃透2000-2023年1250道真题(限时免费送)

我们今天继续来随机看5道AMC10真题&#xff0c;以及详细解析&#xff0c;这些题目来自1250道完整的官方历年AMC10真题库。通过系统研究和吃透AMC10的历年真题&#xff0c;参加AMC10的竞赛就能拿到好名次。 即使不参加AMC10竞赛&#xff0c;初中和高中数学一定会学得比较轻松、…

(开源项目)OpenHarmony、社区共建Sample合入要求

1.新增Sample功能不能重复于当前已有Sample的功能&#xff1b; 2.新增Sample的工程推荐使用ArkTS语言编写&#xff1b; 3.新增Sample的工程推荐使用Stage模型编写&#xff1b; 4.新增Sample的工程中需要包含UI自动化用例&#xff08;ohosTest工程模块&#xff09;&#xff0…

浅谈船舶岸电系统绝缘监测及故障定位需求及应用

彭姝麟 Acrelpsl 0 项目背景 随着现代船舶发展&#xff0c;船舶电气化程度越来越高&#xff0c;船舶电站的的容量也越来越大&#xff0c;随之而来的是电网的绝缘问题更加复杂化。船舶电力系统一般采用IT系统&#xff0c;即不接地系统。IT系统的优点是发生单相接地时不会出现TN…

2014

1,写出计算Ack(m,n)的递归算法 #include<iostream> using namespace std; int A(int m,int n){if(m0){return n1;}else if(m>0&&n0){return A(m-1,1);}else{return A(m-1,A(m,n-1));} }int main(){int m,n;cout<<"please input two number"&l…

SpringCloud Hystrix 断路器

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第五篇&#xff0c;即介绍 Hystrix 断路器。 二、概述 2.1 分布式系统面临的问题 复杂分布式体系结构中…

了解融云敏感词过滤规则和匹配效果

使用即时通讯&#xff08;IM&#xff09;服务内置了开箱即用的敏感词机制时&#xff0c;可能需要在在开发者后台 配置内置敏感词服务 2 添加敏感词。本文描述了敏感词字符串的设置规则和匹配效果。 简体、繁体智能过滤 设置中文简体敏感词后&#xff0c;对应繁体敏感词也会自…

Scrapy 爬虫框架

网络爬虫框架scrapy &#xff08;配置型爬虫&#xff09; 什么是爬虫框架&#xff1f; 爬虫框架是实现爬虫功能的一个软件结构和功能组件集合爬虫框架是个半成品&#xff0c;帮助用户实现专业网络爬虫 scrapy框架结构("52"结构) spider: 解析downloader返回的响…