我试图找出如何路径图形在此根据Eppstein的算法纸作品,以及如何我可以重建从最短路径到与相应的堆结构。
至今:
包含离去一个顶点的所有边中的曲线图其不是在最短路径的一部分。使用此边缘而不是最短路径上的边缘时,它们由称为的“时间浪费”按堆排序。通过应用Dijkstra,我找到了从到每个顶点的最短路径。
我可以通过边的长度+(头顶点的值(有向边指向的位置)-尾点的值(有向边开始的位置)来计算,如果,则为不在最短路径上,如果,则在最短路径上。
现在我建立一个2最小堆由heapifying边集根据它们的对于任何,其中,所述根只有一个孩子(=子树)。
为了构建 i插入ö ü 吨- [R ö ø 吨(v )在ħ Ť(Ñ Ë X 吨Ť(v ))在终端顶点开始吨。每次在插入时以某种方式触摸顶点时,都会用*标记。
现在我可以建立通过插入的其余部分ħ Ò ù 吨(瓦特)在ħ Ť(v )。在每个顶点ħ ģ(v )包含任一2从儿童ħ Ť(v )和1从ħ Ò ù 吨(瓦特)或0由第一和2从第二和是3堆。
借助我可以构建一个称为D (G )的DAG,其中包含一个顶点,该顶点来自H T(v )的每个带*标记的顶点,以及每个来自H o u t(v )的非根顶点。
的根在d (ģ )被称为ħ (v )和它们连接到它们所属的顶点到根据ö û 吨(v )由一个“映射”。
到目前为止,一切都很好。
纸说我可以建立通过插入根- [R = - [R (小号)和该连接到ħ (小号)由inital边缘与δ (ħ (小号))。D (G )的顶点在P (G )中相同,但未加权。边缘有长度。然后,对于每个有向边(Û ,v )∈ d (ģ )在相应的边缘创建和由加权δ (v )- δ (Û )。它们称为堆边缘。然后,对于每个顶点v ∈ P (g ^ ),其表示不能在最短路径连接一对顶点的边缘ü和瓦特,“交叉边缘”是从创建v到ħ (瓦特)在P (g ^ )具有长度δ (h (w。P (G )中的每个顶点的向外度最大为 4。
假设从 r开始的 P (G )路径是 G中s - t路径之间的一一对应的长度。
最后,将构建一个新的有序的4堆堆。每个顶点对应于以r (R )为根的P (G )中的路径。任何顶点的父级都少了一条边。顶点的权重是相应路径的长度。
为了找到最短路径,我使用BFS到P (G )并通过使用H (G )将搜索结果“转换”为路径。
不幸的是,我不了解如何“读取” 然后通过H (G ) “翻译”它以接收k条最短路径。