【发布时间】:2019-12-12 11:52:15
【问题描述】:
我有一个带边的无向图。每条边都有一定的属性,比如点 A 和点 B 之间的边之一是
{
travelTime :10hours
travelPath : air
}
C点和D点之间的另一个可能是
{
travelTime :1hours
travelPath : Metro
}
我们得到了这样一个图表和已知的 travelPaths
{air, Metro,Rail, Bus ,Auto,Rickshaw }
提供给我们的一组边说 unUsedEdges 不属于固定图的一部分。它们也具有上述性质,只是它们不属于固定图。现在在这个固定图中添加了一条来自 unUsedEdges 的边。我们必须说明是否存在一个只有 Metro 和 Rail 类型的循环,其中包括这个新引入的边缘。 然后删除新引入的边缘,我们检查来自 unUsedEdges 的另一个边缘。如果有一个循环,我们需要循环边缘。我们需要来自所有 unUsedEdges 边的所有循环。
固定图很大。 unUsedEdges 集也很大。我们可以使用 DFS 在 O(V+E) 时间内检测无向图中的循环。对所有 unUsedEdges 重复执行此操作需要时间。
有更快的方法吗?
【问题讨论】:
-
一个想法可能是在 O(V^3) 中(预)计算固定图(w.r.t. {Metro, Rail})的reachability matrix。之后,您可以通过检查边是否连接两个可到达的顶点来检查 O(1) 中的每个 unUsedEdge。
标签: algorithm graph-algorithm undirected-graph