zoukankan      html  css  js  c++  java
  • python数据结构与算法——图的最短路径(Dijkstra算法)

     1 # Dijkstra算法——通过边实现松弛
     2 # 指定一个点到其他各顶点的路径——单源最短路径
     3 
     4 # 初始化图参数
     5 G = {1:{1:0,    2:1,    3:12},
     6      2:{2:0,    3:9,    4:3},
     7      3:{3:0,    5:5},
     8      4:{3:4,    4:0,    5:13,   6:15},
     9      5:{5:0,    6:4},
    10      6:{6:0}}
    11     
    12 
    13 # 每次找到离源点最近的一个顶点,然后以该顶点为重心进行扩展
    14 # 最终的到源点到其余所有点的最短路径
    15 # 一种贪婪算法
    16 
    17 def Dijkstra(G,v0,INF=999):
    18     """ 使用 Dijkstra 算法计算指定点 v0 到图 G 中任意点的最短路径的距离
    19         INF 为设定的无限远距离值
    20         此方法不能解决负权值边的图
    21     """
    22     book = set()
    23     minv = v0
    24     
    25     # 源顶点到其余各顶点的初始路程
    26     dis = dict((k,INF) for k in G.keys())
    27     dis[v0] = 0
    28     
    29     while len(book)<len(G):
    30         book.add(minv)                                  # 确定当期顶点的距离
    31         for w in G[minv]:                               # 以当前点的中心向外扩散
    32             if dis[minv] + G[minv][w] < dis[w]:         # 如果从当前点扩展到某一点的距离小与已知最短距离      
    33                 dis[w] = dis[minv] + G[minv][w]         # 对已知距离进行更新
    34         
    35         new = INF                                       # 从剩下的未确定点中选择最小距离点作为新的扩散点
    36         for v in dis.keys():
    37             if v in book: continue
    38             if dis[v] < new: 
    39                 new = dis[v]
    40                 minv = v
    41     return dis
    42 
    43 
    44 dis = Dijkstra(G,v0=1)
    45 print dis.values()    
  • 相关阅读:
    asp.net using library ClosedXML to export excel
    javascript 属性的特性
    javascript 如何避免属性访问错误
    javascript 继承
    Chapter 4 : Character Strings and Formatted Input/Output
    Chapter 3 :Differentiation
    Chapter 3 : Data and C
    Chapter 3 : Data and C
    Chapter 4 : Strings and Formatted Input/Output
    Chapter 1 :Preliminaries
  • 原文地址:https://www.cnblogs.com/hanahimi/p/4692638.html
Copyright © 2011-2022 走看看