私はScalaでDijkstraの最短経路アルゴリズムを再帰的に実装していますが、何か問題があります。私はノードに2
への間違った出力を得ています。これはshortestPath(3, 2, x, BitSet.empty)
と呼ばれています。これは6を出力しますが、正解は7でなければなりません。私のコードで何が間違っているのか分からないようです。Scala - 2つのノード間の最短経路再帰アルゴリズム
var x = ListBuffer(ListBuffer(0, 2, 3, 4),
ListBuffer(2, 0, 0, 0),
ListBuffer(3, 0, 0, 0),
ListBuffer(4, 0, 0, 0))
ここにコードを示します。
def shortestPath(cur: Int, dest: Int, graph: ListBuffer[ListBuffer[Int]], visited: BitSet) :Int = {
val newVisited = visited + cur
if(cur == dest) 0
else {
var pathLength = for(i <- graph(cur).indices; if(!visited(i) && graph(cur)(i) > 0)) yield {
graph(cur)(i) + shortestPath(i, dest, graph, newVisited)
}
if (pathLength.isEmpty) 0 else pathLength.min
}
}
私は今理解しています!しかし、提示されたアルゴリズムやアイデアは正しいですか? –
@TeodoricoLevoff明確にするために、あなたのコードが2つのノード間の最短経路を見つける*か、Int.MaxValueで無限を識別するトリックが正しいかどうかを尋ねようとしていますか? – chiwangc
2つのノード間の最短経路を見つける際にコードが正しい場合。 –