2012-06-11 6 views
1

Floyd-Warshall 알고리즘을 구현했습니다. 그들의 행렬에 따르면, 나는 정확한 결과를 얻을 수있다. 두 장소 사이의 최단 경로와 거리에 관한 것이다. 내 질문은 i에서 j까지 최단 거리를 인쇄하는 방법입니다. 나는 약간의 연구를했고 나는 그와 같은 알고리즘을 발견했다. 아무도 내가 어떻게 설명해야하는지, 어떻게 작동하는지 또는 다른 제안을 말할 수 있습니까?Floyd-Warshall 알고리즘 최단 경로

PrintShortestPath(P,i,j){ 
    if(i==j) print i 
    else if (P[i][j]==NULL) 
     print "No path from i to j" 
    else{ 
     PrintShortestPath(P,i,P[i][j]) 
     print j 
    } 
} 

답변

1

플로이드의 알고리즘은 두 노드 사이의 모든 경로를 고려하여 가장 싼 노드를 찾았습니다. 코드가 반복적으로 발생합니다. http://www.fearme.com/misc/alg/node88.html

또한 스파 스 그래프의 실적이 더 좋은 수 있습니다 익스트라의 알고리즘을 고려할 수 : 는 여기에 또 다른 C에서 이것에 대한 좋은 설명과 구현입니다.

- L.

+0

감사합니다.하지만 그 알고리즘으로 모든 거리를 계산했습니다. 단일 경로를 인쇄하는 대신 x에서 y까지의 경로를 말하고 싶습니다. x에서 y까지의 경로에는 다른 경로가 있습니다 (x와 y). – bledi

0

게시 한 알고리즘의 행렬 P는 선행 행렬입니다. 이전 경로의 모든 경로 i -> j를 나열합니다.

거리 행렬과 함께 계산해야

  • P [I, J] FW 업데이트 P의 가장 안쪽 루프 I FORALL NULL, J
  • 에 initalized된다 [I, J] 노드 k에서 더 짧은 경로를 찾는다면 (P [k, j] 사용).

거리에 솔루션을 게시하면 더욱 정확해질 수 있습니다.

관련 문제