迪杰斯特拉算法python

`import sys

def dijkstra(graph, start):
# 初始化距离字典,将所有顶点的距离设为无穷大,除了起点距离为0
distances = {vertex: float(‘infinity’) for vertex in graph}
distances[start] = 0

# 创建一个未访问顶点集合
unvisited = set(graph)

while unvisited:
    # 从未访问过的顶点中选取距离最小的一个
    current_vertex = min(unvisited, key=lambda vertex: distances[vertex])
    
    # 遍历当前顶点的所有邻居
    for neighbour, distance in graph[current_vertex].items():
        # 计算从起点到邻居的距离
        new_distance = distances[current_vertex] + distance
        
        # 如果发现更短的路径,则更新邻居的距离
        if new_distance < distances[neighbour]:
            distances[neighbour] = new_distance
    
    # 从未访问集合中移除当前顶点
    unvisited.remove(current_vertex)

return distances

示例图,表示为邻接表

graph = {
‘A’: {‘B’: 1, ‘C’: 4},
‘B’: {‘A’: 1, ‘C’: 2, ‘D’: 5},
‘C’: {‘A’: 4, ‘B’: 2, ‘D’: 1},
‘D’: {‘B’: 5, ‘C’: 1}
}

print(dijkstra(graph, ‘A’))`

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值