C# 자료구조 - 다익스트라 알고리즘 Dijkstra

MMORPG 에서는 길찾기를 구현하는 것이 매우 중요하다. 특히 몬스터들이 플레이어를 향해서 길찾기를 하여 다가가야하기때문이다. BFS의 단점. 직관적으로도 알 수 있는 최단경로라고하더라도, BFS를 이용하면 결국 그래프 전체를 탐색해야한다. 필수적이지 않은 정보들까지 검색을 해봐야 경로를 알 수 있다.

1) 임의의 시작 노드를 잡는다 (ex  : start -> 0)
2) 현재 노드와 간선으로 연결 되어있는 노드들 중에서 가장 가중치가 작은 노드를 후보로 선택한다. 
3) 후보가 된 노드를 방문한다. 방문한 노드와 연결된 노드들을 조사해서 상황에 따라 발견한 최단거리를 갱신한다.
4) 연결되지 않았거나 이미 방문한 정점이라면 3)을 생략한다.
5) 조사한 정점의 최단거리를 갱신한다.

1.
start = 0
후보군 : 0
distance = { 0, max, max, max, max, max} .

2.
closest = distance[0]
now = 0
next = 1 or 3
distance = { 0, 15, max, 35, max, max}
visited = { t,  t,  f,  f,  f, f } .

3.
closest = distance[1]
now = 1
next = 2 or 3
distance = { 0, 15, 20, 25, max, max}
visited = { t,  t,  f,  f,  f, f } .

4.
closest = distance[1]
now = 2
next = x
distance = { 0, 15, 20, 25, max, max}
visited = { t,  t,  t,  f,  f, f } .    

5.
closest = distance[3]
now = 3
next = 4
distance = { 0, 15, 20, 25, 30, max}
visited = {t, t, t, t, f, f } .

6.
closest = distance[4]
now = 4
next = 5
distance = { 0,15, 20, 25, 30, 35}
visited = { t, t, t, t, t, f } .

7.
closest = distance[5]
now = 5

distance = { 0,15, 20, 25, 30, 35}
visited = { t, t, t, t, t, t } .

댓글남기기