最短路算法算出来的是什么
步数少的那条,路程反而更长 两步 三步 跑完一次单源最短路,直接得到的是【0】。
⚠️ 两种走法,各要走多远
步数少的那条,路程反而更长 两步 三步 从 0 号到 4 号有两条路:0-2-4(只走 2 段)和 0-1-3-4(走 3 段)。各段长度是 0-1:2 0-2:1 1-3:3 2-4:9 3-4:1。运行下面这段程序,看两条路各多长: W
Dijkstra 每一轮做什么
Dijkstra 的每一轮是【0】。
为什么取出来就能定死
Dijkstra 取出一个点后就不再改它,因为【0】。
Dijkstra 靠什么快速取最近的点
Dijkstra 通常用【0】来取当前最近的点。
⚠️ 从堆里弹出来时先检查什么
从优先队列弹出一个点,第一件事是【0】。
从 0 到各点的最短距离
七个点的带权图,走不到的记 -1。运行下面这段程序: def build(edges): g = {} for a, b, w in edges: g.setdefault(a, []).append((b,
写一个 Dijkstra
补全 dijkstra:用小根堆,弹出时先跳过已经处理过的点,再松弛它的每条边。
把最短路径还原出来
补全 dij_path:松弛成功时记下父亲,最后从终点倒着回溯。输出 0 到 4 的路径(用 - 连)。
⚠️ 最短的路 vs 最少的步
算出 0 到 4 的带权最短路,再和步数最少那条(0-2-4)比一比。 输出三样:最短总长 / 它走了几条边 / 步数最少那条的总长。