Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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 图中的最短路径(mod3=1)_Algorithm_Shortest Path_Breadth First Search - Fatal编程技术网

Algorithm 图中的最短路径(mod3=1)

Algorithm 图中的最短路径(mod3=1),algorithm,shortest-path,breadth-first-search,Algorithm,Shortest Path,Breadth First Search,问题是:我有一个无向图和一个顶点s,我需要每隔一个v(在v中)找到s和v之间的最短路径,如果存在,它的长度mod3=1,如果不存在,它的长度为“无穷大” 我试着用同样的“技巧”在图中找到最短的偶数路径[通过制作一个二分图G'并在其上运行BFS]——试着复制图3次,第一次是“mod0”,第二次是“mod1”,第三次是“mod2”,然后在其上运行BFS,但当我在一个示例上尝试时,它不起作用 a。我的主意好吗?它应该起作用吗?(也许我做错了什么) B如果没有-我真的很想得到一些关于如何解决它的指导/提

问题是:我有一个无向图和一个顶点s,我需要每隔一个v(在v中)找到s和v之间的最短路径,如果存在,它的长度mod3=1,如果不存在,它的长度为“无穷大”

我试着用同样的“技巧”在图中找到最短的偶数路径[通过制作一个二分图G'并在其上运行BFS]——试着复制图3次,第一次是“mod0”,第二次是“mod1”,第三次是“mod2”,然后在其上运行BFS,但当我在一个示例上尝试时,它不起作用

a。我的主意好吗?它应该起作用吗?(也许我做错了什么) B如果没有-我真的很想得到一些关于如何解决它的指导/提示;-)


谢谢大家

我假设我们指的是一个没有边权重的图,因为您没有提到它们。我们可能缺少一些其他信息,例如:

运行时约束?如果在运行时没有给你一个上限,这似乎很奇怪。
长度为mod3=1的最短路径?这是否意味着您需要最短路径,而不管mod3=1的值如何,然后确定该条件是否为真,或者您需要从s到v的任何给定顶点的最短mod3=1长度路径(我假设后者)
您的输出是什么?听起来您只是简单地发回路径长度,而不是路径或布尔值数组

但是按照你给我们的,在没有明确给出答案的情况下,我认为我们不需要创建图表本身的副本

但是,请考虑顶点与其相邻顶点之间的关系,以及modC如何沿路径在顶点与其相邻顶点之间进行更改。为了使事情变得简单,首先只考虑s及其邻域作为图形

至于你的答案,你的想法并不坏,因为你正在思考问题,但理解解决方案不起作用的原因总是好的。我认为对于这个问题,首先找出一个可行的解决方案,然后再重新考虑你的答案可能会更容易


希望这有帮助

我假设我们指的是一个没有边权重的图,因为您没有提到它们。我们可能缺少一些其他信息,例如:

运行时约束?如果在运行时没有给你一个上限,这似乎很奇怪。
长度为mod3=1的最短路径?这是否意味着您需要最短路径,而不管mod3=1的值如何,然后确定该条件是否为真,或者您需要从s到v的任何给定顶点的最短mod3=1长度路径(我假设后者)
您的输出是什么?听起来您只是简单地发回路径长度,而不是路径或布尔值数组

但是按照你给我们的,在没有明确给出答案的情况下,我认为我们不需要创建图表本身的副本

但是,请考虑顶点与其相邻顶点之间的关系,以及modC如何沿路径在顶点与其相邻顶点之间进行更改。为了使事情变得简单,首先只考虑s及其邻域作为图形

至于你的答案,你的想法并不坏,因为你正在思考问题,但理解解决方案不起作用的原因总是好的。我认为对于这个问题,首先找出一个可行的解决方案,然后再重新考虑你的答案可能会更容易


希望这有帮助

你的想法很好。复制thd图三次。三个副本将对应于路径长度mod3=0、mod3=1、mod3=2

使用以下边使图形有方向:如果顶点a和b之间有边,则添加这些有方向的边:
a0->b1,a1->b2,a2->b0,b0->a1,b1->a2,b2->a0
,其中a0,a1,a2是a的三个副本


之后,您可以使用BFS查找s0和v1之间的边,这样路径的长度将与1 mod 3一致。

您的想法很好。复制thd图三次。三个副本将对应于路径长度mod3=0、mod3=1、mod3=2

使用以下边使图形有方向:如果顶点a和b之间有边,则添加这些有方向的边:
a0->b1,a1->b2,a2->b0,b0->a1,b1->a2,b2->a0
,其中a0,a1,a2是a的三个副本


之后,您可以使用BFS查找s0和v1之间的边,因此路径的长度将与1 mod 3一致。

您好,我想您可以回答这个问题。事实上,我的图没有边权重。此外,关于任务信息:1。运行时-“你能找到的最好的”2。长度为mod3=1的最短路径-您的第二个假设:-)3。对于v中的每一个v,如果存在,我需要返回路径长度,如果不存在,则返回“无穷大”。我会去想一想你说的关于顶点和它的邻居之间的关系。嗨,我想你的答案是正确的。事实上,我的图没有边权重。此外,关于任务信息:1。运行时-“你能找到的最好的”2。长度为mod3=1的最短路径-您的第二个假设:-)3。对于v中的每一个v,如果存在,我需要返回路径长度,如果不存在,则返回“无穷大”。我会去想想你说的关于顶点和它的邻居之间的关系。