← 返回模型库
MODEL / 优化

动态规划 / 最短路

多阶段决策(逐期投入、分阶段调度)或赋权图上的路径问题,例如最省时路径、最优分组与分段。

核心公式

d(v)\leftarrow\min\{d(v),d(u)+w(u,v)\},\qquad w(u,v)\ge 0

Python 最小示例

下载 .py 文件 ↓

依赖见代码开头;示例在自己的 Python 环境运行,页面不执行代码。用于理解方法,正式参赛请补齐数据检验与误差分析。

Python · 动态规划 / 最短路
# 依赖: 标准库 heapq
import heapq

def dijkstra(graph, source):
    if any(w < 0 for edges in graph.values() for w in edges.values()):
        raise ValueError('Dijkstra 不支持负权边')
    dist = {source: 0.0}
    prev = {}
    pq = [(0.0, source)]
    while pq:
        d, u = heapq.heappop(pq)
        if d > dist.get(u, float('inf')):
            continue
        for v, w in graph.get(u, {}).items():
            nd = d + w
            if nd < dist.get(v, float('inf')):
                dist[v], prev[v] = nd, u
                heapq.heappush(pq, (nd, v))
    return dist, prev

graph = {'A': {'B': 1.0, 'C': 4.0}, 'B': {'C': 1.0}, 'C': {}}
print(dijkstra(graph, 'A')[0])

用它研究过哪些问题?

浏览赛题库 →