单源最短路算出的是什么

跑完一次单源最短路,直接得到的是【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。运行下面这段程序,看两条路各多长: #include <algorith

开始练习 →

Dijkstra 每一轮做什么

第 1 步:起点 0:距离 0 第 2 步:松弛 0 的边:得 2 和 1 第 3 步:取出最近的 2 号 第 4 步:再取 1 号:3 号变成 5 第 5 步:取 3 号:4 号改小成 6 第 6 步:全部定死,最短距离到手 0 1 3

开始练习 →

为什么取出来就能定死(C++)

Dijkstra 取出一个点后就不再改它,因为【0】。

开始练习 →

靠什么快速取最近的点

Dijkstra 通常用【0】来取当前最近的点。

开始练习 →

从堆里弹出来先检查什么

从优先队列弹出一个点,第一件事是【0】。

开始练习 →

从 0 到各点的最短距离

七个点的带权图,走不到的记 -1。运行下面这段程序: #include <algorithm> #include <iostream> #include <queue> #include <set&

开始练习 →

写一个 Dijkstra

补全 dijkstra:用小根堆,弹出时先跳过已经处理过的点,再松弛它的每条边。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

把最短路径还原出来

补全 back_track:dij_path 在松弛成功时已经记下了父亲 par[v] = u,从终点倒着回溯就是路径。输出 0 到 4 的路径(用 - 连)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

最短的路和最少的步

算出 0 到 4 的带权最短路,再和步数最少那条(0-2-4)比一比。输出三样:最短总长 / 它走了几条边 / 步数最少那条的总长。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →