Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.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 Dijkstra算法问题_Algorithm_Dijkstra_Greedy - Fatal编程技术网

Algorithm Dijkstra算法问题

Algorithm Dijkstra算法问题,algorithm,dijkstra,greedy,Algorithm,Dijkstra,Greedy,如何对图应用Dijkstra算法来找到MST,从而生成的树必须在两个给定顶点之间有一条边?(例如:MST必须包括X和Y之间的边) 感谢Dijkstra的算法用于最短路径(不是MST),但类似于Dijkstra的算法,经过修改以找到最小生成树,称为Prim算法。Prim的算法保持一棵树的生长,直到它跨越整个图形。这里引入的附加约束不会带来太多困难:您只需从X-Y作为树开始 特别是,假设MST必须包含边(X,Y)(如果有多条这样的边,请选择权重最小的一条),请从具有两个节点X和Y以及它们之间的边的树

如何对图应用Dijkstra算法来找到MST,从而生成的树必须在两个给定顶点之间有一条边?(例如:MST必须包括X和Y之间的边)


感谢

Dijkstra的算法用于最短路径(不是MST),但类似于Dijkstra的算法,经过修改以找到最小生成树,称为Prim算法。Prim的算法保持一棵树的生长,直到它跨越整个图形。这里引入的附加约束不会带来太多困难:您只需从X-Y作为树开始


特别是,假设MST必须包含边(X,Y)(如果有多条这样的边,请选择权重最小的一条),请从具有两个节点X和Y以及它们之间的边的树开始。现在,在每一步中选择最小的边(u,v),其中u在树中,v在树外,将节点v和边(u,v)添加到树中,然后重复。Dijkstra的算法用于最短路径(不是MST),但类似于Dijkstra的算法,经过修改以找到最小生成树,称为Prim算法。Prim的算法保持一棵树的生长,直到它跨越整个图形。这里引入的附加约束不会带来太多困难:您只需从X-Y作为树开始


特别是,假设MST必须包含边(X,Y)(如果有多条这样的边,请选择权重最小的一条),请从具有两个节点X和Y以及它们之间的边的树开始。现在,在每一步中,选择最小的边(u,v),其中u在树中,v在树外,将节点v和边(u,v)添加到树中,然后重复。

+1对于Prim的算法,非常有趣,我可以简单地在Prim中执行此操作,但问题是使用Dijkstra查找具有上述约束的MST,Jkstra将无法找到MST。考虑具有3边的简单图,B值为4,B C成本为5,C成本为7。Dikjstra总是希望从7的C中选择B和C作为最短路径,但总树重为12。但是Prim总是选择A B和B C,因为树的总重量是9,即使从A到C的最短路径也是9。算法非常相似,但我永远不会调用行为类似于后来Dijkstra的东西。如果这是一个家庭作业,也许教授只是想让你意识到把Dijkstra的算法转换成Prim的算法是多么容易?+1对于Prim的算法,非常有趣,我可以在Prim中简单地做这件事,但问题是使用Dijkstra找到具有上述约束的MST,而Dijkstra不会找到你的MST。考虑具有3边的简单图,B值为4,B C成本为5,C成本为7。Dikjstra总是希望从7的C中选择B和C作为最短路径,但总树重为12。但是Prim总是选择A B和B C,因为树的总重量是9,即使从A到C的最短路径也是9。算法非常相似,但我永远不会调用行为类似于后来Dijkstra的东西。如果这是一个家庭作业,也许教授只是想让你意识到把Dijkstra的算法转化为Prim的算法是多么容易?检查这个Dijkstra没有找到MST开始。是的。在这种情况下需要修改。检查此Dijkstra没有找到要开始的MST。是。在这种情况下,需要对其进行修改