Dijkstra算法

Dijkstra算法

def Dijkstra(start):
  '''
  1、初始化起点start到其他点距离 distance={},并初始化已经计算过的 visited=set();
  2、获取距离起点start最近的一个点 next,遍历next的邻居节点 neighbors;
  3、if distance[neighbors[i]] < distance[next] + martix[next][neighbors[i]],则更新
  4、重复计算,直到visited包含所有的节点
  return distance, 包括起点到其他点的最短距离
  '''
  distance = {}
  visited = set()
  for i in range(V):
    if i == start:
      distance[i] = 0
      visited.add(start)
    else:
      distance[i] = martix[start][i]
  next_node = find_lowest_node(distance, visited)
  while next_node:
    for i in range(V):
      distance[i] = min(distance[i], distance[next_node]+martix[next_node][i])
    next_node = find_lowest_node(distance, visited)
  return distance

def find_lowest_node(distance, visited):
  # 从距离字典中选取下一个权重最小的节点
  next_node = None
  next_weight = float('inf')
  for node, weight in distance.items():
    if node not in visited and weight < next_weight:
      next_node, next_weight = node, weight
  return next_node


if __name__ == '__main__':
  # 节点数 V, 邻接矩阵 martix,
  V = map(int, input())
  martix = [[float('inf') for _ in range(V)] for _ in range(V)]
  for _ in range(V):
    # 节点v-u的权重是w
    v, u, w = list(map(int, input().split()))
    martix[v][u] = w
    # 有向图注释下面一行
    martix[u][v] = w
  # 起始点start
  start = map(int, input())
  distince = Dijkstra(start)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值