写一个暴力枚举当标尺

写一个暴力枚举当标尺

补全 brute:把从 s 到 t 的所有不重复经过点的路径都走一遍,取最小的总长。

阅读更多 →
让 Dijkstra 在这个反例上跑一遍

让 Dijkstra 在这个反例上跑一遍

补全 dijkstra(照课本写法:弹出即定死),在那个有负权边的图上跑,输出它给 3 号的距离。

阅读更多 →
正确答案应该是多少

正确答案应该是多少

把 0 到 3 的所有路径都枚举一遍,取最短的。运行下面这段程序: def brute(g, s, t): INF = 10 ** 9 best = [INF] def go(

阅读更多 →
⚠️ 一个四点的反例

⚠️ 一个四点的反例

有向图:0→1 长 4、0→2 长 5、2→1 长 -3、1→3 长 1。运行 Dijkstra,看它给出的距离表: import heapq def dijkstra(g, s): INF

阅读更多 →
出现负权该换成什么

出现负权该换成什么

图里确实有负权边时,应该换成【0】。

阅读更多 →
⚠️ 负权边上跑 Dijkstra 会怎样

⚠️ 负权边上跑 Dijkstra 会怎样

图里有负权边还硬跑 Dijkstra,结果是【0】。

阅读更多 →
Dijkstra 为什么要求非负权

Dijkstra 为什么要求非负权

Dijkstra 要求边权非负,是因为【0】。

阅读更多 →
⚠️ 最短的路 vs 最少的步

⚠️ 最短的路 vs 最少的步

算出 0 到 4 的带权最短路,再和步数最少那条(0-2-4)比一比。 输出三样:最短总长 / 它走了几条边 / 步数最少那条的总长。

阅读更多 →
把最短路径还原出来

把最短路径还原出来

补全 dij_path:松弛成功时记下父亲,最后从终点倒着回溯。输出 0 到 4 的路径(用 - 连)。

阅读更多 →
写一个 Dijkstra

写一个 Dijkstra

补全 dijkstra:用小根堆,弹出时先跳过已经处理过的点,再松弛它的每条边。

阅读更多 →