迪杰斯特拉算法python实现

回顾下最短路径的地杰斯特拉算法

迪杰斯特拉算法是求从某一个起点到其余所有结点的最短路径,是一对多的映射关系,是一种贪婪算法

示例: 

迪杰斯特拉算法python实现_第1张图片
算法实现流程思路: 
迪杰斯特拉算法每次只找离起点最近的一个结点,并将之并入已经访问过结点的集合(以防重复访问,陷入死循环),然后将刚找到的最短路径的结点作为中间结点来更新相邻结点的路径长度,这样循环找到图中一个个结点的最短路径。

# dists定义了图,记录着从从起点出发到其他顶点的距离
dist={1:{2:1,3:12},
      2:{3:9,4:3},
      3:{5:5},
      4:{3:4,5:13,6:15},
      5:{6:4},
      6:{6:0}}
cost={1:0,2:1,3:12,4:999,5:999,6:999}  # 由起点(结点1)到其余顶点的最短距离,999代表无法到达
parents={1:None,2:1,3:2,4:2,5:3,6:5}   # parent代表到达这个结点的最短路径的前一个结点
visited=[1]   # 起始结点默认已经访问过

# 找到还没有访问的结点中路径最短的一个结点
def findShorestNode(cost):
    minDist=999
    node=None
    for i in dist.keys():
        if (cost[i]             minDist=cost[i]
            node=i
    return node

# 更新最短路径
node=findShorestNode(cost)
while node:
    for i in dist[node]:  # 所有node结点的邻居结点
        newcost=cost[node]+dist[node][i]
        if newcost             parents[i]=node
            cost[i]=newcost
    visited.append(node)
    node=findShorestNode(cost)

# 打印出从1到6的最短路径
parent=parents[6]
while parent:
    print(parent)
    parent=parents[parent]

结果:

 迪杰斯特拉算法python实现_第2张图片

 

你可能感兴趣的:(迪杰斯特拉算法python实现)