[C++]BOJ 2178 - 미로 탐색
각 칸에서 이동할 수 있는 칸으로 탐색해나가 도착점에 도달하면 그 이동 거리가 최소 거리가 되므로 bfs를 사용하면 빠르게 해결할 수 있다.
dfs로도 해결할 수 있지만 한번 방문한 칸은 다신 방문하지 않는 bfs와는 다르게 모든 경로를 탐색하므로 작동시간이 다소 오래걸린다.
두 방법 모두 다뤄보겠다.
우선 bfs를 사용한 방법은 x, y방향, 이동횟수 큐를 만들어서 각각 1을 넣어준다. (시작점 좌표(1, 1)
, 시작 이동횟수 = 1
)
이후 상하좌우로 이동할 수 있는 칸을 큐에 계속 넣어주고 이동횟수도 업데이트한다.
큐가 비었거나 도착점에 도달하면 종료 후 이동횟수를 출력한다.
1 |
|
dfs를 사용한 방법은 앞서 설명한 bfs보다 간단하다.
이동할 수 있는 모든 칸을 찾으며 각 칸까지 도달하는데 최소 이동횟수를 저장한다.
도착점에 저장된 이동횟수를 출력한다.
모든 경우를 탐색하므로 시간이 오래 걸린다.
1 |
|