【发布时间】:2020-09-26 07:33:56
【问题描述】:
我已经在这个问题上卡了两天了,仍然没有进展。基本上问题如下: 给定一个无向简单加权和连通图,我们必须找到从给定源到给定目的地的最短步行路程,同时访问给定集合 A 中的至少一个顶点和集合 B 中的至少一个顶点,并添加约束:集合 B 的顶点应该总是在访问集合 A 的顶点之后出现。 集合 A 和 B 不相交,图中可以有既不属于 A 也不属于 B 的顶点。源顶点和目的顶点只有一个。
我尝试将最短路径分解为一个访问顶点的路径,即从源访问 A 中的 v,然后从 v 到 B 中的另一个 w,然后从 w 到目的地。这可以分别使用具有不同起始顶点的 3 次 Dijkstra 通道来完成。但是,我必须选择这样的最小值 v 导致 O(VElog(V)) 复杂度,其中 V = 顶点数和 E = 边数。 我非常坚持如何在 O(E*log(V)) 中执行此操作,因为问题是这样问的,即仅使用 O(1) Dijkstra 运行。有人可以帮帮我吗?
编辑:我们不能像某些人建议的那样构建新图或修改它,以构建水平图。 我必须以某种方式修改 Dijkstra 例程来解决这个问题。 Graph. Blue vertices are the set A, purple ones set B. Home is 0 and Destination is 8 例如,在这个图中(见链接),最短的步行应该是:0 -> 1 -> 0 -> 3 -> 6 -> 7 -> 8 总成本 = 6
【问题讨论】: