一个特定的州在其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%?相似
答案 0 :(得分:2)
让我们调用给定图 G(V,E),其中 E 可以分为 D + F ,其中 D 表示可通行道路, F 表示不通道路。
根据注释中的建议,重复图形,因此您有 G(V,D)和 G'(V',D')。对于任何给定的顶点 u∈V ,都有一个“复制”顶点 u'∈V'。因此,还有一个 s'和一个 t'。目前,我们不包括 F 或 F'。
然后为每个边(u,v)∈F 定义一组边 F°为(u,v') 。因此, F°中的这些边是从 V 到 V'的可通过连接-仅在该方向上。
我们将此新曲线称为 G°(V°,E°),其中 V°= V + V', E°= D + D'+ F°和上一段中定义的 F°。
现在解决了在 G°中从 s 变为 {t,t'} 的问题。由于从 V'到 V 没有边,因此以 t'结尾的求解路径将仅使用一条边(u, v')来自 F°。请注意,如果通过比 t'更短的路径到达 t ,则意味着不使用来自 F°的边(无需通行的道路待耕种)。
在 G°中找到 s 和 {t,t'} 之间最短路径的问题现在是一个可以解决的标准问题用Dijkstra的算法解决。还需要做一件事:对于每个访问的 w'∈V', F°中的边(u,v')被越过到达那里-需要记录。该信息应仅传递到算法访问的下一个顶点,以便最终找到 t'时,可以立即给出答案,即边(u,v' )。
此算法中访问的边数最多为 | E°|。 = | D + D'+ F°| ≤2 | E | = O(| E |)。该算法仅对每个边缘访问一次,因此时间复杂度为 O(| E |)。
答案 1 :(得分:0)
您可以尝试按以下方法解决此问题:
您可以维护一个数组dist [n] [2],其中n是顶点数。
dist [i] [0]表示到达i且不清除任何积雪的道路所需的最短时间
dist [i] [1]代表通过清除从源头到有积雪的i的一条道路到达i所需的最短时间。
现在可以用来解决此问题的数据结构是队列。该算法如下所述。
1. Insert your source vertex into the queue and mark it as zero. //marking 0 helps us to know that no roads has been cleared yet.
2. Do while queue is not empty
2.1 Pop element from queue. Let it be x.
2.2 For all the vertices i connected to x
dist_without_clearing = dist[x][0] + cxi
dist_with_clearing = dist[x][1] + cxi
dist_with_clearing = min(dist_with_clearing,dist[x][0] + cxi) // here only the roads that are covered with snow needs to be considered.
if(dist_without_clearing < dist[i][0])
insert(i,0) in queue
dist[i][0] := dist_without_clearing
endif
if(dist_with_clearing < dist[i][1])
insert(i,1) in queue.
dist[i][1] := dist_with_clearing
endif
3. Return min(dist[destination][0], dist[destination][1]) as your answer.