迪杰斯特拉算法 代码

参考链接:

【路径规划】全局路径规划算法——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 = INF
        col = -1
        row = -1
        for 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 = u
        if col == -1 or row == -1:  # 若没找出最小值且节点还未找完,说明图中存在不连通的节点
            break
        S.append(col)  # 在S中添加已找到的节点
        U.remove(col)  # 从U中移除已找到的节点
        distance[col] = min_value # source到该节点的最短距离即为min_value
        path_optimal[col] = path_optimal[row][:]    # 复制source到已找到节点的上一节点的路径
        path_optimal[col].append(col)       # 再其后添加已找到节点即为source到该节点的最短路径
    return S, distance, path_optimal


def main():
    INF = float('inf')
    # 使用邻接矩阵存储图
    # A B C D E F G
    matrix = [[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()


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营第六天| 242.有效字母的异位词、349.两个数组的交集、202快乐数、1.两数之和

系列文章目录 目录 系列文章目录242.有效的字母异位词349. 两个数组的交集①使用HashSet②使用Hash数组 202. 快乐数1. 两数之和①暴力解法&#xff08;时间复杂度不符合要求&#xff09;②使用HashMap法 242.有效的字母异位词 这道题是数组在哈希表中的典型应用。 因为只有2…

【C++】STL(七) set容器

8. set容器8.1 简介8.2 构造和赋值例子 8.3 大小和交换例子 8.4 插入和删除例子 8.5 查找和统计例子 8.6 set和multiset区别例子 8.7 pair对组创建 ----- 成对出现的数据&#xff0c;利用对组可以返回两个数据创建方式例子 8.8 内置类型指定排序规则&#xff08;1&#xff09; …

Powershell应用

Powershell应用 帮助命令进程管理服务管理文件管理网络管理系统管理用户管理远程管理常见问题 字符串和文本处理脚本和模块其他常用命令返回值类型PowerShell调用C# 类库PowerShell使用WmiWQL测试工具 帮助命令 Get-Help 这个命令用于获取其他命令的帮助文档&#xff0c;例如 …

像SpringBoot一样使用Flask - 3.蓝图路由Blueprint

接上一篇文章《像SpringBoot一样使用Flask - 2.静态资源访问及模版》&#xff0c;我们看到测试的"controller"都写在了一起&#x1f914; 如何像Springboot一样划分出一个完整的controller&#xff0c;里面实现不同业务的包呢&#xff1f; 本篇引入Blueprint&#xf…

Qt教程 — 1.1 Linux下安装Qt

目录 1 下载Qt 1.1 官方下载 1.2 百度网盘下载 1.3 Linux虚拟机终端下载 2 Qt安装 3 安装相关依赖 4 测试安装 1 下载Qt 1.1 官方下载 通过官网下载对应版本&#xff0c;本文选择的版本为qt-opensource-linux-x64-5.12.12&#xff0c;Qt官方下载链接&#xff1a;htt…

Liunx文件系统和基础IO

文件系统和基础IO 基础IOc语言基础IO函数当前路径和标准流系统IO系统调用函数重定向FILE文件结构体 在谈缓存区问题理解文件系统初识inode 基础IO c语言基础IO函数 打开与关闭 FILE *fopen(char *filename, const char *mode);选项还可以是 r/w/a 意味着为可读可写打开。 2…

【CSS】 css 实现文字的渐变色

效果 实现 .text {position: absolute;left: 52px;top: 1px;width: 200px;height: 31px;font-family: YouSheBiaoTiHei;font-size: 24px;color: rgba(255, 255, 255, 0.8);line-height: 31px;text-shadow: 0px 0px 8px #000000;text-align: center;font-style: normal;transiti…

车载气象站比传统气象站的优势是什么

【TH-CZ5】车载气象站在灵活性、覆盖范围、实时监测、多功能性和成本效益等方面均优于传统气象站。这些优势使得车载气象站在气象监测、气象服务、灾害应急等领域具有广泛的应用前景。 车载气象站与传统气象站相比&#xff0c;具有显著的优势&#xff0c;主要体现在以下几个方…

内网渗透-跨域环境渗透-2

目录 内网渗透-跨域环境渗透-2 热土豆提权 Wimc连接执行命令 Responder 密码抓取 WPAD提权 提取域控的NTDS hash文件 内网渗透-跨域环境渗透-2 热土豆提权 这个是提升本地权限的&#xff0c;不是提域控&#xff01; 总结&#xff1a;Potato.exe -ip 需要提权的IP -disab…

Java+SpringBoot+Vue+MySQL:教育培训办公系统的全栈开发

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

系统设计学习(二)用户认证场景

一、常用鉴权方式 HTTP Basic Authentication (HTTP基本认证) session-cookie 1&#xff0c;服务器在接受客户端首次访问时在服务器端创建session&#xff0c;然后保存session(我们可以将session保存在内存中&#xff0c;也可以保存在redis中&#xff0c;推荐使用后者)&…

Idea 看不到本地 change

环境 idea IntelliJ IDEA 2023.3.3 (Community Edition) idea 升级后&#xff0c;看不到本地change了&#xff0c;去掉下面勾选即可。 解决&#xff1a;

python调用clickhouse

&#xff08;作者&#xff1a;陈玓玏&#xff09; 使用clickhouse-driver包&#xff0c;先通过pip install clickhouse-driver安装包&#xff0c;再通过以下代码执行sql。 from clickhouse_driver import Client client Client(host10.43.234.214, port9000, userclickhou…

【网络安全】手机不幸被远程监控,该如何破解,如何预防?

手机如果不幸被远程监控了&#xff0c;用三招就可以轻松破解&#xff0c;再用三招可以防范于未然。 三招可破解可解除手机被远程监控 1、恢复出厂设置 这一招是手机解决软件故障和系统故障的终极大招。只要点了恢复出厂设置&#xff0c;你手机里后装的各种APP全部将灰飞烟灭…

AMEYA360:稳先微汽车驱动芯片—智能高边开关WS7系列

近几年&#xff0c;新能源汽车高速发展&#xff0c;用车浪潮蔓延全球&#xff0c;我国新能源汽车占有量连续9年居全球前列&#xff0c;2023年全年市占率达37.7%&#xff0c;市场规模可观&#xff0c;并显现出以下特点&#xff1a;电车产品对比油车优势明显、消费者接受度高、市…

蓝桥杯算法错题记录-基础篇

文章目录 本文还在跟新&#xff0c;最新跟新时间3/11&#xff01;&#xff01;&#xff01; 格式一定要符合要求&#xff0c;&#xff08;输入&#xff0c;输出格式&#xff09;1. nextInt () next() nextLine() 的注意事项2 .数的幂 a^2等3.得到最大长度&#xff08;最大...&a…

【python pyinstaller库】pyinstaller介绍、安装、以及相关重点知识

PyInstaller是一个在Windows、GNU/Linux、macOS等平台下将Python程序冻结&#xff08;打包&#xff09;为独立可执行文件的工具, 用于在未安装Python的平台上执行Python编写的应用程序。 相比类似工具&#xff0c;它的主要优点是 PyInstaller 与 Python 3.7-3.10 一起工作&…

阿里又又发布了一个“AI神器”

阿里给“打工”朋友送上“节日礼物” 六一儿童节当天&#xff0c;阿里就给所有“打工”的大朋友送上了一份“节日礼物” 6月1日上午&#xff0c;阿里云发布了面向音视频内容的AI新品“通义听悟”&#xff0c;并正式公测 通义千问、通义听悟 这哥俩现在所处环境不同&#xff0…

Druid连接池经常性断链问题

前段时间有应用使用Druid连接池经常的提示断链报错&#xff0c;整个问题排查分析过程很有意思。这里将Druid连接池、数据库层以及负载均衡层的配置分析下&#xff0c;记录整个问题的分析过程&#xff0c;同时梳理下Druid连接池的配置和连接保活及回收机制。 1、问题背景 应用…

线程(thread)

目录 线程的基本特性 pthread库的主要函数 pthread_create pthread_join pthread_exit pthread_mutex_init pthread_mutex_lock 和 pthread_mutex_unlock pthread_cond_init pthread_cond_wait 和 pthread_cond_signal / pthread_cond_broadcast pthread_cond_destro…