좌표가있는 그리드에 6 개의 정점이있는 그래프가 있습니다.
A ( 0,0)
B ( 4,7)
C ( 7,4)
D (10,4)
E (16,2)
F (16,0)
해당 정점에 대해 완전한 그래프를 생성하고 MAX( ABS( x1 - x2 ), ABS( y1 - y2 ) )
표준 모서리에 대한 비용과 웜홀에 대한 비용 인 각 모서리에 비용을 할당 할 수 있습니다 .
이것은 비용을 인접 행렬로 제공합니다.
A B C D E F
- -- -- -- -- -- --
A - 7 7 10 16 16
B 7 - 0 6 12 12
C 7 0 - 3 9 9
D 10 6 3 - 0 6
E 16 12 9 0 - 2
F 16 12 9 6 2 -
단방향 왜곡이있는 경우 그래프 (또는 인접 행렬)에서 반대 방향이 아닌 해당 방향으로가는 가장자리 만 만듭니다.
그런 다음 Dijkstra의 알고리즘 을 우선 순위 대기열 과 함께 사용할 수 있습니다 .
A
각 인접 모서리 에서 시작 하여 우선 순위 큐로 푸시 하십시오 .
형식 : (경로 : 비용)
queue = [ (A-B : 7), (A-C : 7), (A-D : 10), (A-E : 16), (A-F : 16) ]
항목이 대기열로 푸시 될 때-각 정점의 최소 비용을 추적하고 기존 최소 비용보다 비용이 저렴한 경우 대기열로의 경로 만 푸시합니다.
min-costs = { A: 0, B: 7, C: 7, D: 10, E: 16, F: 16 }
대기열에서 첫 번째 항목을 제거하고 비용이 여전히 최소 비용과 일치하는 경우 해당 경로와 인접한 모서리로 형성된 모든 복합 경로를 우선 순위 대기열로 다시 밉니다 (복합 경로의 비용이 기존 최소값보다 낮은 경우).
없애다: (A-B : 7)
- 시도
(A-B-A : 14)
-더 높은 비용으로 거부
- 시도
(A-B-C : 7)
-동일한 비용으로 거부
- 시도
(A-B-D : 13)
-더 높은 비용으로 거부
- 시도
(A-B-E : 19)
-더 높은 비용으로 거부
- 시도
(A-B-F : 19)
-더 높은 비용으로 거부
없애다 (A-C : 7)
- 시도
(A-C-A : 14)
-더 높은 비용으로 거부
- 시도
(A-C-B : 7)
-동일한 비용으로 거부
- 시도
(A-C-D : 10)
-동일한 비용으로 거부
- 시도
(A-C-E : 16)
-동일한 비용으로 거부
- 시도
(A-C-F : 16)
-동일한 비용으로 거부
없애다 (A-D : 10)
- 시도
(A-D-A : 20)
-더 높은 비용으로 거부
- 시도
(A-D-B : 16)
-더 높은 비용으로 거부
- 시도
(A-D-C : 13)
-더 높은 비용으로 거부
- 시도
(A-D-E : 10)
-대기열에 삽입
- 시도
(A-D-F : 16)
-동일한 비용으로 거부
이제 대기열은 다음과 같습니다.
queue = [ (A-D-E : 10), (A-E : 16), (A-F : 16) ]
min-costs = { A: 0, B: 7, C: 7, D: 10, E: 10, F: 16 }
없애다 (A-D-E : 10)
- 시도
(A-D-E-A : 26)
-더 높은 비용으로 거부
- 시도
(A-D-E-B : 22)
-더 높은 비용으로 거부
- 시도
(A-D-E-C : 19)
-더 높은 비용으로 거부
- 시도
(A-D-E-D : 10)
-동일한 비용으로 거부
- 시도
(A-D-E-F : 12)
-대기열에 삽입
그런 다음 대기열은 다음과 같습니다.
queue = [ (A-D-E-F : 12), (A-E : 16), (A-F : 16) ]
min-costs = { A: 0, B: 7, C: 7, D: 10, E: 10, F: 12 }
를 제거 (A-D-E-F : 12)
하고 12의 비용으로 대상 노드에 도착했음을 찾으십시오.
참고 : 경로 (A-B-C-D-E-F)
, (A-C-D-E-F)
및 (A-D-E-F)
모든 12의 동일한 최소 비용을 가지고있다.