저는 스칼라에서 다이크 스트라의 최단 경로 알고리즘을 재귀 적으로 구현하고 있지만 약간의 문제가 있습니다. 노드 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
}
}
나는 이제 이해합니다! 그러나 제시된 알고리즘이나 아이디어가 맞습니까? –
@TeodoricoLevoff 명확히하기 위해, 두 노드 사이의 최단 경로를 찾는 * 코드가 정확한지 또는 Int.MaxValue로 무한대를 식별하는 트릭이 올바른지 묻는 중입니까? – chiwangc
두 노드 사이의 최단 경로를 찾는 데 코드가 올바른 경우. –