靠什么快速取最近的点
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 <