최단 경로의 정점의 나머지 소스 관점에서
다 익스트라 (Dijkstra 프로그램) 알고리즘
다 익스트라 알고리즘은 최단 경로의 경로 길이 결과에 따른 오름차순이다. (마이너스 원 잘못된 알고리즘)
알고리즘 설명 :
- <VI, VJ> 존재하지 않는 경우, 호 [I] [J] 가중 유향 그래프 가중치 인접 행렬 호, 호 [I]는 [j]가 아크 <VI, VJ>의 무게로 표시한다고 가정 ] S는 처음에 비어 밝혀졌다 최단 경로의 시작 단부에서 정점 (V0)의 집합이고, ∞이다.
- V0은 VS가 편성 된 <V0, VJ> 첨가 VJ 버텍스 S. 가장 짧은 경로를 선택
- VJ는 S, 최단 경로 변경은 VS 수정 V0 최단 경로에 추가하기 때문에
- 반복은, 최단 경로가 순차적으로 증가하는 시퀀스 나머지 꼭지점에 V0로부터 얻어진 수치 2,3- N-1 번 단계
이 알고리즘은 마지막으로 증분 최단 경로 순서를 얻을 수있다, 각각의 사이클은 나머지 최단 경로를 찾은 다음 최소의 선택 뒤에 선택 정렬과 같은 같은 때마다, 최단 경로의 나머지 부분에 대한 업데이트하는 것입니다 도 정점에서 최단 경로의 각각에 소스 인 순서 시퀀스의 앞단에.
/ * G.arcs : 가중 인접 행렬 VO : 소스 P : 매트릭스 스토리지 경로 D : V0의 최단 경로의 길이를 저장하는 VI의 * / 무효 shortestPath_DLJ (MGraph G, INT의 V0, PathMatrix & P, ShortPathTable & D) { / * 나머지 정점 V0 정점 P V의 가장 짧은 경로에서 요청 [V], 우측 길이 D와 [V] P [V] (W)가 전류를 최단 경로 V의 정점 V0에서 결정된다는 사실이다 [W] 최종 [V]를 최단 경로로 V V0로부터 획득 한 사실이며, 곧 정점 V의 S 농축에 추가됩니다 * / // 초기화 용 (V = 0 , V <G.vexnum; V ++ ) { 파이널 [V] = 거짓 ; // V에 V0이 경우 아크 D에 할당된다 [V] 중량 달리 무한대 // G.arcs INFINITY의 값과 두 개의 호에는 정점하지 D [V] = G.arcs [ V0 [V]; // 블랭킹 경로 대 (W = 0 ; W <G.vexnum; W ++) P [V] [W] = flase; // D는 [V] 값 INFINTY 미만이면, V, V0에 V0가 기재된 아크는 V 경로 NATURAL IF (D는 [V] <INFINTY) {P는 [V] [V0] = 참 ; P을 [V] V] = 참 ;} } // 초기화, 집합 S에 속하는 V0 D [V0] = 0 ; 최종 [V0]는 = 참 ; // 메인 루프를 시작 각 계산 최단 경로 V로 V0을 정점 V는 집합 S에 추가 // G.vexnum 휴식 - 1 개 정점 대 (I을 = . 1 , I는 G.vexnum를 <; I는 ++ ) { / / V0에서 현재 최단 거리 분 = INFINTY; 대 (W = 0 ; W <G.vexnum; W ++ ) // 정점 VS에서 IF {V = W; 분 = (! 최종 [V]) D [W]} // 발견 상기 V는 S 세트에 추가되어 최종 [V]가 = 참 ; / * 최단 거리를 업데이트 V로 설정된 S에 첨가하고, 새로운 경로는 정점 v를 생성 최단 경로를 찾기 위해 옆에있는 최단 경로를 다시하는 것은-결정 * / 대 (w = 0 , w <G.vexnum; ++ w ) 의 경우 (최종 [w] && 분 G.arcs + [V] [w] <! {D [w]) D [W] = 분 + G.arcs [V] [W]; // V에 V0 경로, P는 [V] P [W]에 할당 // W 경로에있는 P [W] = P [ V]; P [w] [w] = 참 ; } } }
계속합니다. . .