Algorithm Dijkstra算法修正
我知道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,
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更长