Я рекурсивно реализую алгоритм кратчайшего пути Дейкстры в Scala, но у меня возникли некоторые проблемы. Я получаю неправильный вывод для узлов с 3
по 2
, так называемых shortestPath(3, 2, x, BitSet.empty)
. Это выводит 6, но правильный ответ должен быть 7. Кажется, я не могу понять, что не так с моим кодом.
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
}
}