python dijkstra 最短路算法示意代码


 

def dijkstra(graph, from_node, to_node):
    q, seen = [(0, from_node, [])], set()
    while q:
        cost, node, path = heappop(q)
        seen.add(node)
        path = path+[node]
        if node == to_node:
            return cost,path
        for adj_node, c in graph.get(node, {}).items():
            if adj_node not in seen:
                heappush(q, (cost+c, adj_node, path))
    return -1,[]

air_lines = {"1":{"2":2000, "3":2000, "4":4000, "5": 4500}, "2":{"5": 1000}, "3":{"4": 1000}, "4":{"5": 500}}

print(dijkstra(air_lines, "1", "4"))
print(dijkstra(air_lines, "1", "5"))
print(dijkstra(air_lines, "4", "5"))
print(dijkstra(air_lines, "5", "4"))
print(dijkstra(air_lines, "1", "1"))
print(dijkstra(air_lines, "10", "10"))

"""
(3000, ['1', '3', '4'])
(3000, ['1', '2', '5'])
(500, ['4', '5'])
(-1, [])
(0, ['1'])
(0, ['10'])
"""

  


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM