迪杰斯特拉dijkstra算法的python实现
原图链接:http://www.cnblogs.com/skywang12345/p/3711516.html
本文以下图为例,用dijkstra算法计算由节点D至其它所有节点的最短路径
此时,起点D到各个顶点的最短距离就计算出来了:A(22) B(13) C(3) D(0) E(4) F(6) G(12)。
以下是dijkstra算法的python实现:
def generate_matrix():M = 1E100matrix = [[0, 12, M, M, M, 16, 14],[12, 0, 10, M, M, 7, M],[M, 10, 0, 3, 5, 6, M],[M, M, 3, 0, 4, M, M],[M, M, 5, 4, 0, 2, 8],[16, 7, 6, M, 2, 0, 9],[14, M, M, M, 8, 9, 0]]return matrixdef dijkstra(matrix, source):M = 1E100n = len(matrix)m = len(matrix[0])if source >= n or n != m:print('Error!')returnfound = [source] # 已找到最短路径的节点cost = [M] * n # source到已找到最短路径的节点的最短距离cost[source] = 0path = [[]]*n # source到其他节点的最短路径path[source] = [source]while len(found) < n: # 当已找到最短路径的节点小于n时min_value = M+1col = -1row = -1for f in found: # 以已找到最短路径的节点所在行为搜索对象for i in [x for x in range(n) if x not in found]: # 只搜索没找出最短路径的列if matrix[f][i] + cost[f] < min_value: # 找出最小值min_value = matrix[f][i] + cost[f] # 在某行找到最小值要加上source到该行的最短路径row = f # 记录所在行列col = iif col == -1 or row == -1: # 若没找出最小值且节点还未找完,说明图中存在不连通的节点breakfound.append(col) # 在found中添加已找到的节点cost[col] = min_value # source到该节点的最短距离即为min_valuepath[col] = path[row][:] # 复制source到已找到节点的上一节点的路径path[col].append(col) # 再其后添加已找到节点即为sorcer到该节点的最短路径return found, cost, pathdef main():matrix = generate_matrix()found, cost, path = dijkstra(matrix, 3)print('found:')print(found)print('cost:')print(cost)print('path:')for p in path:print(p)if __name__ == '__main__':main()
迪杰斯特拉dijkstra算法的python实现相关推荐
- 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)
目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...
- 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题
1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...
- java数据结构和算法——迪杰斯特拉(Dijkstra)算法
目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...
- 迪杰斯特拉(Dijkstra)算法解决最短路径问题
Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...
- 最短路径算法-迪杰斯特拉(Dijkstra)算法
最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...
- Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法
1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...
- java实现迪杰斯特拉(Dijkstra)算法求解最短路问题
迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的.是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题. 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分 ...
- 数据结构——图——迪杰斯特拉(Dijkstra )算法
数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...
- 最短路径 - 迪杰斯特拉(Dijkstra)算法
对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...
最新文章
- HTML上传excel文件,php解析逐条打印输出
- 无废话-SQL Server 2005新功能(1) - TSQL
- MATLAB从入门到精通系列之几个实用小技巧
- 录制失败因为媒体服务失败_具惠善减肥失败,竟然是因为它
- BZOJ-2242-计算器-SDOI2011-BSGS
- 【Linux】一步一步学Linux——dpkg-query命令(271)
- 关于Angular directive使用的语法问题
- 微软一顿操作猛如虎,PowerShell 排名直线上升
- java框架之Quartz-任务调度整合Spring
- C++基础部分_C++文件操作_二进制文件的读操作---C++语言工作笔记079
- Android开发笔记(九十)建造者模式
- Linux杀100个进程,在linux bash中杀死一个进程子树
- vue 改变组件data_为什么vue组件中data必须用函数表达?
- 【Kotlin -- 知识点】学习资料
- GPS精确授时方法研究-基于ublox GPS
- 如何下载微博、B站(哔哩哔哩)视频到电脑
- 解决esp8266无法连接手机和电脑热点的问题
- ASP.NET 安全认证(二)
- 自动驾驶之-MATLAB环境下利用单目摄像头和语义分割创建占位栅格(occupancy grid)
- 如何实现自有App上的小程序第三方微信授权登陆?