문제 링크
- http://icpc.me/2665
문제 출처
- 1997 전국 본선 고등부2
사용 알고리즘
- Dijkstra
- 0-1 BFS
시간복잡도
- O(N2)
풀이
각 셀을 정점으로 잡고, 인접한 셀끼리 간선으로 이어줍시다. 그러면 정점 N2개, 간선 O(N2)로 구성된 그래프가 만들어집니다.
이때, 도착 정점이 흰 방이라면 해당 간선의 가중치를 0, 검은 방이라면 1로 설정해주어야 합니다.
(1, 1)부터 (N, N)까지 갈 때 검은 방을 최소 몇 개를 거쳐야 하는지를 물어본다는 것은, 위에서 모델링 한 그래프에서 최단 거리를 묻는 것과 같습니다.
Dijkstra 알고리즘을 이용해 구할 수 있습니다. 하지만 간선의 가중치가 0 또는 1이므로 (이 글)에서 설명한 0-1 BFS를 이용하면 O(V + E)만에 최단 거리를 구할 수 있습니다.
전체 코드
1 |
|