在图表中找到强制访问某些边缘的最短路径,而其他人则不必访问

时间:2016-08-07 10:58:49

标签: algorithm graph graph-theory shortest-path

我有一个无向图,包含大约1000个节点和2000个边,一个起始节点和一个结束节点。我必须从起始节点遍历遍历所有强制边(大约10)的结束节点,而不必遍历所有顶点或节点。是否有一个简单的解决方案,就像现有的图遍历算法中的一些细微变化?我该怎么做?

感谢您的帮助。:)

这个问题与Find the shortest path in a graph which visits certain nodes不同,因为我的问题是关于强制边而不是顶点。

编辑:可以按任何顺序遍历强制边缘。

1 个答案:

答案 0 :(得分:2)

要从相关问题开始,假设您有图表 G =(V,E),您必须以给定顺序遍历的10条特定边 E'= 1,...,e 10 > ∈E,以及起始和结束节点 s,v∈V。您需要按照给定的顺序使用 E'找到从 s到v 的最短距离。

您可以通过制作10份图表来完成此操作。从单个副本开始(即,同构t G =(V,E)),除了 e 1 从第一个副本移动到第二份副本。在第二个副本中(再次同构t G =(V,E)),删除 e 1 ,并使 e 2 从第二个副本移动到第三个副本。等等。在结果图中,运行任何算法以从第一个副本中的 s 获取到第10个副本中的 e

说明:直观地想象您的图表 G 是在2d纸上绘制的。复印它,这样你就可以复印10份,并将它们堆叠成10张纸(尽管如此,想象它们之间有一点空间)。现在更改图表,以便从第一张纸到第二张纸的唯一方法是通过从底部纸张到达的 e 1 边缘第二张。从第二张纸到第三张纸的唯一方法是通过边缘 e 2 从第二张纸张到第三张纸张,依此类推。您的问题是找到从底部工作表上 s 对应的节点开始的最短路径,并在顶部工作表上与 e 对应的节点处结束。

要解决原始问题,只需使用 E'的所有可能排列重复此操作。注意有10个! ~3.5e6的可能性,并不是那么多。