Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在强制访问某些边而不强制访问其他边的图中查找最短路径_Algorithm_Graph_Graph Theory_Shortest Path - Fatal编程技术网

Algorithm 在强制访问某些边而不强制访问其他边的图中查找最短路径

Algorithm 在强制访问某些边而不强制访问其他边的图中查找最短路径,algorithm,graph,graph-theory,shortest-path,Algorithm,Graph,Graph Theory,Shortest Path,我有一个无向图,大约有1000个节点和2000条边,一个开始节点和一个结束节点。我必须从开始节点到结束节点遍历所有强制边(大约10条),而不必遍历所有顶点或节点。有没有一个简单的解决方案,比如对现有的图遍历算法进行一些小的修改?我该怎么做 谢谢你的帮助。:) 这个问题与我的问题不同,因为我的问题是关于强制边而不是顶点 编辑:强制边可以以任何顺序进行遍历。要从一个相关问题开始,假设您有一个图G=(V,E),10条特定边必须以给定顺序E'=1,…,e10>∈E、 以及开始和结束节点s、v&in

我有一个无向图,大约有1000个节点和2000条边,一个开始节点和一个结束节点。我必须从开始节点到结束节点遍历所有强制边(大约10条),而不必遍历所有顶点或节点。有没有一个简单的解决方案,比如对现有的图遍历算法进行一些小的修改?我该怎么做

谢谢你的帮助。:)

这个问题与我的问题不同,因为我的问题是关于强制边而不是顶点


编辑:强制边可以以任何顺序进行遍历。

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

你可以通过复制10份图表来做到这一点。从单个副本开始(即同构的tg=(V,e)),但e1从第一个副本移动到第二个副本。在第二个副本中(同样同构的tg=(V,E)),移除e1,并让e2从第二个副本移动到第三个副本。在生成的图形中,运行任何算法,从第一个副本中的s到第十个副本中的e

说明:直观地想象一下,图形G绘制在一张2d纸上。复印它,这样你就有10份,然后把它们叠成一堆10张纸(想象一下它们之间有一点空间)。现在稍微更改一下图形,以便从第一张纸上升到第二张纸的唯一方法是通过从底部纸到第二张纸的边e1。从第二张纸到第三张纸的唯一方法是通过从第二张纸到第三张纸的边e2,依此类推。您的问题是找到最短路径,该路径从底部图纸上对应于s的节点开始,到顶部图纸上对应于e的节点结束


要解决原来的问题,只需用E'的所有可能排列重复这个过程。注意有10个!~3.5e6的可能性并不多。

我可以以任何顺序遍历强制边。。。。对不起,忘了提了that@KashyapC.Kotak这个问题很清楚。我的回答是这样的——见最后一段。我真的没有“从一个副本转移到另一个副本”。对不起,请你详细说明一下好吗?为了加快速度,我建议先预计算10条强制边中涉及的(最多)20个顶点之间的所有最短路径对(例如,使用Floyd Warshall算法,或重复Dijkstra)。在这之后,350万个排列中的每一个都可以更快地进行测试。请注意,当一个强制边AB恰好位于两个CD和EF之间的最短路径上时,不必担心边缘情况,因为在某个时刻,你会考虑AB出现在CD和EF之间的排列,并且最短路径将更短。您可以构建2^10=1024个输入图副本,每个可能的边子集一个副本。(副本之间的转换也会发生类似的情况。)这应该快得多,因为单个最短路径的时间开销只会乘以1024,而不是350万,但您可能会耗尽内存!