我试图解决当地的节目竞赛问题。问题基本上是在加权图中找到最短路径。我对这些类型的问题都很陌生,我认为我可以使用Dijkstra的算法。但是,有一个小的复杂因素 - 某些值是不同的,具体取决于当前路径的情况。
问题
有两种类型的权重:正常权重和带条件的权重(让他们称之为K)。条件是这样的:一旦你通过权重K移动边缘,所有其他类型K的权重值为0.这带来了一些问题,因为明显的最短路径可以通过具有K类型权重的边的组合来打败
示例
以下是此类问题。如果没有权重会改变它们的值,我们可以很容易地找到Dijkstra的最短路径。然而,当权重K改变它们的值时,我们可以找到更短的路径,因为在移动通过边缘A-C之后边缘C-D的权重是0。
问题
如何找到最短路径?
我可以在这里使用Dijkstra算法,还是更好地使用其他算法,如A *或BFS?
答案 0 :(得分:2)
有多少K?
我只有一个,Dijkstra很好。 我会补充说,BFS不能很好地处理重量。
提醒:Dijkstra找到从顶点到所有顶点的最短路径。
运行Dijkstra两次并为每次运行定义不同的wight函数。首先,K值的wight函数是无限的。 K值的第二个wight函数是0.
比较run1到run2 + K的结果。
这是真的,因为如果最短路径没有K,第一次运行会找到它。否则它是K,第二次运行会找到它。无论哪种方式,算法都会找到它。