F算法——求任意两点之间的最短径

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Dijsktra算法是一种用于解带权图中单源最短路径的贪心算法。其基本思想是从起开始,逐步扩大范围,直到覆盖所有节。在扩大的过程中,每次选择当前距离起最近的一个节,并更新与该节相邻的节的距离。具体步骤如下: 1.初始化:将起到各个节的距离设为正无穷,将起到自身的距离设为0。 2.选择当前距离起最近的一个节,并标记为已访问。 3.更新与该节相邻的节的距离:如果经过当前节到达相邻节的距离比原来的距离更短,则更新距离。 4.重复步骤2和3,直到所有节都被访问过。 5.输出起到各个节的最短路径。 以下是一个使用Python实现Dijsktra算法的例子: ```python import heapq def dijkstra(graph, start): # 初始化距离 distances = {node: float('inf') for node in graph} distances[start] = 0 # 初始化堆 heap = [(0, start)] while heap: # 取出堆中距离起最近的节 (current_distance, current_node) = heapq.heappop(heap) # 如果当前节已经被访问过,则跳过 if current_distance > distances[current_node]: continue # 更新与当前节相邻的节的距离 for neighbor, weight in graph[current_node].items(): distance = current_distance + weight if distance < distances[neighbor]: distances[neighbor] = distance heapq.heappush(heap, (distance, neighbor)) return distances # 测试 graph = { 'A': {'B': 2, 'C': 4}, 'B': {'C': 1, 'D': 3}, 'C': {'D': 2}, 'D': {'C': 1, 'E': 3}, 'E': {'F': 2}, 'F': {} } distances = dijkstra(graph, 'A') print(distances) # 输出:{'A': 0, 'B': 2, 'C': 3, 'D': 5, 'E': 8, 'F': inf} ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值