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 Dijkstra算法修正_Algorithm_Graph_Graph Algorithm_Dijkstra - Fatal编程技术网

Algorithm Dijkstra算法修正

Algorithm Dijkstra算法修正,algorithm,graph,graph-algorithm,dijkstra,Algorithm,Graph,Graph Algorithm,Dijkstra,我知道Dijkstra的最短路径算法。但是,如果我要修改它,这样它就不会找到最短路径,而是使用贪婪算法找到最长路径。我必须对下面的代码做些什么: 以下是我使用的: 作为在最短路径版本中选择正确节点的比较功能: if (Cost(potential_node) > Cost(current_node) + cost(source , current_node)) then cost (potential_node) = cost(current_node) + cost (source,

我知道Dijkstra的最短路径算法。但是,如果我要修改它,这样它就不会找到最短路径,而是使用贪婪算法找到最长路径。我必须对下面的代码做些什么:

以下是我使用的:

作为在最短路径版本中选择正确节点的比较功能:

 if (Cost(potential_node) > Cost(current_node) + cost(source , current_node)) then
 cost (potential_node) = cost(current_node) + cost (source, current_node)
但是,要达到另一面,这是不可行的:

 if (Cost(potential_node) < Cost(current_node) + cost(source , current_node)) then
 cost (potential_node) = cost(current_node) + cost (source, current_node)
有点困惑,希望能得到一些反馈,因此没有已知的多项式解

所建议的修改不起作用,因为当dijkstra的算法将一个节点标记为闭合时,这意味着永远不会有一条更短的路径到达它。如果您关闭了一个节点,那么当您尝试为最长路径执行此操作时,该声明是不正确的,这并不意味着不再有指向该节点的路径

回想一下,这正是我们在Dijkstra算法中证明的,在每一步中,更多的松弛将不会找到任何较短的路径,但如果您使用midification找到一条当前最长的顶点路径-这并不意味着它确实是最长的路径-可能有一条最长路径尚未探索

编辑-反例当它不工作原谅我我是一个糟糕的ascii艺术家

        A
      /   \
     /     \
    1       2  
   /         \
  B-----5---> C
V = {A,B,C} ;  E = { (A,B,1), (A,C,2), (B,C,5) }
现在,从A开始,这个方法首先会发现C是最长的路径,然后关闭它。从现在开始-根据Dijkstra的算法,C没有变化,因此您将得出结论,从A到C的最长路径长度为2,而路径A->B->C更长。

是这样,因此没有已知的多项式解

所建议的修改不起作用,因为当dijkstra的算法将一个节点标记为闭合时,这意味着永远不会有一条更短的路径到达它。如果您关闭了一个节点,那么当您尝试为最长路径执行此操作时,该声明是不正确的,这并不意味着不再有指向该节点的路径

回想一下,这正是我们在Dijkstra算法中证明的,在每一步中,更多的松弛将不会找到任何较短的路径,但如果您使用midification找到一条当前最长的顶点路径-这并不意味着它确实是最长的路径-可能有一条最长路径尚未探索

编辑-反例当它不工作原谅我我是一个糟糕的ascii艺术家

        A
      /   \
     /     \
    1       2  
   /         \
  B-----5---> C
V = {A,B,C} ;  E = { (A,B,1), (A,C,2), (B,C,5) }
现在,从A开始,这个方法首先会发现C是最长的路径,然后关闭它。从现在开始-根据Dijkstra的算法,C没有变化,因此您将得出结论,从A到C的最长路径长度为2,而路径A->B->C更长