原图链接: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实现相关推荐

  1. 数据结构与算法(7-4)最短路径(迪杰斯特拉(Dijkstra)算法、弗洛伊德(Floyd)算法)

    目录 一.最短路径概念 二.迪杰斯特拉(Dijkstra)算法(单源最短路径) 1.原理 2.过程 3.代码 三.弗洛伊德(Floyd)算法(多源最短路径) 1.原理 2.存储 3.遍历 4.代码 参 ...

  2. 059.迪杰斯特拉(Dijkstra)算法的原理以及解决最短路径问题

    1. 迪杰斯特拉(Dijkstra)算法的原理 1.1. 算法应用场景-最短路径问题 1.2. 基本介绍 1.3. 步骤详解 1.4. 思路解析 1.5. 图解步骤 2. 迪杰斯特拉(Dijkstra ...

  3. java数据结构和算法——迪杰斯特拉(Dijkstra)算法

    目录 一.迪杰斯特拉(Dijkstra)算法介绍 二.迪杰斯特拉(Dijkstra)算法过程 三.迪杰斯特拉(Dijkstra)算法--应用场景(最短路径问题) 四.迪杰斯特拉(Dijkstra)算法 ...

  4. 迪杰斯特拉(Dijkstra)算法解决最短路径问题

    Dijkstra 算法介绍 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959年提出的,因此又叫狄克斯特拉算法.迪杰斯特拉(Dijkstra)算法是最经典的最短路径算法之一,用 ...

  5. 最短路径算法-迪杰斯特拉(Dijkstra)算法

    最短路径算法-迪杰斯特拉(Dijkstra)算法 迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径. 它的主要特点是以起始点为中心向外层层扩展(广度优先遍历思 ...

  6. Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法

    1.Java迪杰斯特拉(Dijkstra)算法与弗洛伊德(Floyd)算法 1.1 迪杰斯特拉(Dijkstra)算法 1.1.1 迪杰斯特拉(Dijkstra)算法介绍 迪杰斯特拉(Dijkstra ...

  7. java实现迪杰斯特拉(Dijkstra)算法求解最短路问题

    迪杰斯特拉(Dijkstra)算法是由荷兰计算机科学家狄克斯特拉于1959年提出的.是寻找从一个顶点到其余各顶点的最短路径算法,可用来解决最短路径问题. 迪杰斯特拉算法采用贪心算法的策略,将所有顶点分 ...

  8. 数据结构——图——迪杰斯特拉(Dijkstra )算法

    数据结构--图--迪杰斯特拉(Dijkstra )算法 这是一个按路径长度递增的次序产生最短路径的算法.它的思路大体是这样的. 比如说要求图7-7-3中顶点v0到顶点v1的最短距离,没有比这更简单的了 ...

  9. 最短路径 - 迪杰斯特拉(Dijkstra)算法

    对于网图来说,最短路径,是指两顶点之间经过的边上权值之和最少的路径,并且我们称路径上的第一个顶点为源点,最后一个顶点为终点.最短路径的算法主要有迪杰斯特拉(Dijkstra)算法和弗洛伊德(Floyd ...

最新文章

  1. HTML上传excel文件,php解析逐条打印输出
  2. 无废话-SQL Server 2005新功能(1) - TSQL
  3. MATLAB从入门到精通系列之几个实用小技巧
  4. 录制失败因为媒体服务失败_具惠善减肥失败,竟然是因为它
  5. BZOJ-2242-计算器-SDOI2011-BSGS
  6. 【Linux】一步一步学Linux——dpkg-query命令(271)
  7. 关于Angular directive使用的语法问题
  8. 微软一顿操作猛如虎,PowerShell 排名直线上升
  9. java框架之Quartz-任务调度整合Spring
  10. C++基础部分_C++文件操作_二进制文件的读操作---C++语言工作笔记079
  11. Android开发笔记(九十)建造者模式
  12. Linux杀100个进程,在linux bash中杀死一个进程子树
  13. vue 改变组件data_为什么vue组件中data必须用函数表达?
  14. 【Kotlin -- 知识点】学习资料
  15. GPS精确授时方法研究-基于ublox GPS
  16. 如何下载微博、B站(哔哩哔哩)视频到电脑
  17. 解决esp8266无法连接手机和电脑热点的问题
  18. ASP.NET 安全认证(二)
  19. 自动驾驶之-MATLAB环境下利用单目摄像头和语义分割创建占位栅格(occupancy grid)
  20. 如何实现自有App上的小程序第三方微信授权登陆?

热门文章

  1. jquery audio没有声音_技术丨电脑爆音、杂音、没有声音的解决方案
  2. ip地址查询(GeoIP)
  3. txt如何转成tsv文件
  4. 华为OD机试 - 二进制差异数(Java JS Python)
  5. 流量战争:中国互联网的新一轮上山下乡运动
  6. PLDA宣布在其XpressLINK™系列CXL控制器IP中支持CXL™ 2.0
  7. UPNP端口映射Android实现
  8. http content-type常见文件格式类型
  9. 谈论知乎热门回答:技术人,你的努力为什么没有意义?
  10. APP权限越界:多款APP开启与主业无关的敏感权限