【发布时间】:2019-10-06 22:35:16
【问题描述】:
一个特定的州在其 V 个城市的集合中有一组 E 道路,其中从城市 u 到相邻城市 v 的道路经过的时间由 cuv 给出。 (注意 cuv 不一定等于 cvu——实际上可能没有从 v 到 u 的路。)暴风雪过后,有些道路无法通行,但州长需要尽快从 s 市开车到 t 市有时间只清理一条无法通行的道路。给出一个 O(E log V ) 算法,该算法确定要耕种的道路(仅一条),以实现从城市 s 到城市 t 的最短可能时间路径。输入是所有道路的列表、每条道路的值 cuv、s、t 和一组不可通行的道路。如果道路清理没有帮助,算法应该这样说。
我认为解决这个问题的最接近的方法是使用 Dijkstra 算法找到最短路径,但是,由于我们不知道哪条道路不可通行,哪条道路可以通过,Dijkstra 算法似乎不适合这个问题。那么,有没有其他算法能够检查每条边的状态并找到最短路径?对不起我的逻辑,我不太了解这个问题,任何回复或提示都会有所帮助,谢谢。
谁能解释我的问题与Shortest path between two vertices when exactly one edge weight can be reduced by 50%?的相似之处
【问题讨论】:
-
我不认为我的问题与这个相似,你能解释一下它们有何相似之处吗?在我的问题中,无法通行的道路(u,v)是由于雪,有从 u 到 v 不再有任何优势。如果我们犁路,成本再次变为 Cuv。我们不知道这是否会影响 s --> t 或影响多少。因此,如果它不缩短我们的时间消耗,它可能不需要犁路。但是在您发布的问题中,解决方案似乎必须包括优惠券才能获得 50% 的折扣。
-
原理是一样的——一个动作可以做一次。在链接的问题中,它是一张优惠券,在您的问题中,它是雪犁。两种情况下的解决方案都是相同的:复制您的图表,其中第一个副本是使用犁之前的状态,第二个副本是犁之后的状态。您寻找从犁前的 s 到犁后的 t 的最短路径(如果需要,也可以寻找犁前的 t)。两个副本之间的边正是无法通行的街道(您只能遍历其中任何一个;您最终会进入图表的第二个副本并且无法返回)。
-
“你寻找一条从犁前的 s 到犁后的 t 的最短路径(如果你愿意,也可以是犁前的 t)。两个副本之间的边缘正是无法通行的街道”你能解释一下吗?这个说法,我还在苦苦挣扎,Dijkstra的算法是如何通过复制我的图找到最短路径的。我们必须在这两个图上运行算法吗?一个在犁前,一个在犁后,我们怎么知道要犁哪条路才能得到最短的路径。(如果你能举一个更好的例子)
-
我想你可以使用 Dijkstra 的算法,如果你记住禅宗哲学家巴绍曾经写过的话:“一条路……无法通行……不是一条路。还有一个甜甜圈…… .没有洞……是丹麦人”。他是个有趣的人……
标签: algorithm