HPC综合-心得与笔记【19】

Dijkstra算法【2】

基础

  • 距离数组dist,设置起点距离为0,其他节点距离为无穷大(∞)

  • 用最小堆创建优先队列,将起点放入队列。

  • 从队列中取出当前距离最小的节点u。

  • 遍历u的每个邻接节点v,计算从起点到v的路径长度:alt = dist[u] + weight(u, v)。

  • 如果alt < dist[v],更新dist[v]为alt,并将v加入队列

Python

下面代码由DeepSeek生成,仅改动一点错误

import heapq

def dijkstra(graph, start):
    # 初始化距离数组
    dist = {node: float('inf') for node in graph}
    dist[start] = 0
    
    # 优先队列(最小堆)
    priority_queue = [(0, start)]
    
    while priority_queue:
        current_dist, u = heapq.heappop(priority_queue)
        
        # 如果当前距离大于已知距离,跳过
        if current_dist > dist[u]:
            continue
        
        # 遍历邻接节点
        for v, weight in graph[u].items():
            alt = dist[u] + weight
            if alt < dist[v]:
                dist[v] = alt
                heapq.heappush(priority_queue, (alt, v))
    
    return dist

# 示例图
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}
}

# 计算从A到其他节点的最短距离
start_node = 'A'
shortest_distances = dijkstra(graph, start_node)
print(f"从节点 {start_node} 出发的最短距离:")
for node, distance in shortest_distances.items():
    print(f"到节点 {node} 的最短距离是 {distance}")

参考文献

DeepSeek

你可能感兴趣的:(HPC,and,3D,Graphics,Engine,线性规划)