靠什么快速取最近的点

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 编译。)

开始练习 →

默认的优先队列先出谁

第 1 步:堆里先放 (0,0) 第 2 步:弹出 0,压进 (1,2)(2,1) 第 3 步:弹出 2,压进 (10,4) 第 4 步:弹出 1,压进 (5,3) 第 5 步:弹出 3,压进 (6,4) 第 6 步:(10,4) 过期了:

开始练习 →

写成小根堆要加什么

要让 priority_queue 先弹出距离最小的一对,模板的第三个参数写【0】。

开始练习 →

INF 为什么常取这个数

写 C++ 最短路时 INF 常取 0x3f3f3f3f(约 10 亿),主要因为【0】。

开始练习 →

默认堆的弹出顺序

运行下面这段程序: #include <algorithm> #include <iostream> #include <queue> #include <set> #include <

开始练习 →