概览
所有字段以收录时的公开信息为准
- 项目名称
- Dijkstra 最短路径
- 原始名称
- 未提供
- 别名
- Dijkstra 最短路径、最短路径、路径规划、图算法、单源最短路径
- 一句话简介
- 手写 Dijkstra 最短路径,优先队列加路径回溯,附内置断言。
- 详细介绍
单文件实现邻接表建图、优先队列取最小距离、松弛更新和路径回溯。示例图跑完会输出完整路径与总长度,并用断言校验结果。只依赖 Python 标准库,适合对照课本推导边看边跑。
- 分类
- 算法与数学建模
- 语言
- Python
- 技术栈
- 未提供
- 上手难度
- 入门
- Star 数
- 未提供
- 许可证
- MIT
- 作者
- 开源拾遗
获取方式
优先使用原始仓库
本项目通过以下方式获取:站内代码片段
站内代码片段
67 行
文件snippets/dijkstra-path.py
"""Dijkstra 最短路径 —— 站内原创示例代码
用途:给定带权无向图,求两个节点之间的最短路径。
适用:路径规划、图论作业、导航算法入门。
依赖:仅 Python 标准库(heapq)。
运行:python dijkstra-path.py
许可:MIT(开源拾遗原创,可自由使用与修改)
"""
import heapq
def dijkstra(graph, start):
"""返回 (最短距离表, 前驱表)。graph 形如 {节点: [(邻居, 权重), ...]}。"""
dist = {node: float("inf") for node in graph}
prev = {node: None for node in graph}
dist[start] = 0
visited = set()
queue = [(0, start)]
while queue:
d, u = heapq.heappop(queue)
if u in visited:
continue
visited.add(u)
for v, weight in graph[u]:
candidate = d + weight
if candidate < dist[v]:
dist[v] = candidate
prev[v] = u
heapq.heappush(queue, (candidate, v))
return dist, prev
def shortest_path(graph, start, end):
"""返回 (路径列表, 总长度);不可达时返回 (None, inf)。"""
dist, prev = dijkstra(graph, start)
if dist.get(end, float("inf")) == float("inf"):
return None, float("inf")
path = []
cur = end
while cur is not None:
path.append(cur)
cur = prev[cur]
return path[::-1], dist[end]
if __name__ == "__main__":
# 一张小地图:节点是地点,边是距离
graph = {
"A": [("B", 4), ("C", 2)],
"B": [("A", 4), ("C", 1), ("D", 5)],
"C": [("A", 2), ("B", 1), ("D", 8), ("E", 10)],
"D": [("B", 5), ("C", 8), ("E", 2)],
"E": [("C", 10), ("D", 2)],
}
path, total = shortest_path(graph, "A", "E")
print("最短路径:", " -> ".join(path))
print("总长度:", total)
# 自检:结果应为 A -> C -> B -> D -> E,长度 10
assert path == ["A", "C", "B", "D", "E"], path
assert total == 10, total
print("断言通过")
站内原创示例代码,仅演示核心思路,许可证为 MIT。本条目为站内整理内容,未提供原始仓库地址。
安装与运行
命令均来自公开资料
环境与依赖
- Python 3.9+
安装命令
未提供
运行命令
python snippets/dijkstra-path.py
数据与硬件
未核实的字段不会编造
- 数据集说明
- 未提供
- 硬件要求
- 未提供
运行验证状态
四态徽章
实验已验证
已按说明完成安装、启动,并跑通实验或核心流程,结果可复现。
- 未测试
- 依赖安装已测试
- 基本启动已测试
- 实验已验证
说明:只有真正执行过对应步骤才会升级状态;未测试 表示仅核对了公开信息。
- 当前状态
- 实验已验证
- 最后核对
- 2026-10-18
- 核对版本
- 待核实
- 验证说明
已在本机 Python 3.14.6 实际运行:A→C→B→D→E,总长度 10,内置断言通过。
许可证与引用
转载与引用请保留出处
- 许可证
- MIT
- 作者 / 组织
- 开源拾遗
- 原始仓库
- 未提供
- 核对版本
- 待核实
- 最后核对
- 2026-10-18
- 收录日期
- 2026-10-18
引用建议
Dijkstra 最短路径 / 开源拾遗. 《开源拾遗》收录,收录日期 2026-10-18,最后核对 2026-10-18. 许可证:MIT.
许可证以原始仓库的 LICENSE 文件为准;本站不对许可证做法律判断。