알고리즘

최단 경로 구하기. BFS? 다익스트라?

삶은겨란 2022. 8. 26. 16:51

1. BFS

가중치가 없는 경우 사용.

시작노드에서 최종노드까지 가는데 지나온 간선의 개수가 거리가 된다.

모든 노드를 검사하면서 인접한 노드를 검사하기 때문에

그래프를 인접 리스트로 나타내면

인접 행렬로 나타내면 가 된다.

따라서 그래프를 인접 리스트로 나타내자.

DFS는? BFS에 비해 비효율적이라 사용하지 않는다.

2. 다익스트라

가중치가 있는 경우 사용. 특히 가중치가 서로 다를 때.

이동한 간선의 개수가 적다고 최단거리가 아닌 경우이다.

이럴 때는 BFS를 사용해 구할 수 없다.

※ 가중치에 음수가 있으면 사용할 수 없다. (벨만-포드!)

우선순위 큐를 이용해 가중치가 짧은 간선을 선택한다.

과정)

0. 각 노드까지의 최단거리를 저장할 리스트를 만든다.(최소값으로 갱신하므로 방문하지 않은 노드는 무한으로 초기화)

1. 시작노드 설정

2. 시작노드 기준 인접한 노드의 최소비용을 저장

3. 방문하지 않은 노드 중에서 가장 비용이 적은 노드 선택

4. 선택한 노드에서 방문하지 않은 노드로 가는 최소비용 저장

5. 반복