-
문제
https://www.acmicpc.net/problem/2178
2178번: 미로 탐색
첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.
www.acmicpc.net
How to Solve ?
[1] BFS
DFS와는 다르게 BFS는 자신의 위치에서 가장 가까운 노드를 찾고, 이동하는 탐색 알고리즘이기에 "최단거리"를 구하는데 매우 유용한 알고리즘이다.
그래프와 관련된 문제를 풀면서, DFS를 더 많이 접하여서 BFS 문제 푸는데 시간이 꽤 많이 걸렸는데 다 풀고 나니까 어느정도는 이해가 된 느낌이 든다.
function BFS(x, y) { const queue = [x, y]; while (queue.length) { visited[x][y] = 1; x = queue.shift(); y = queue.shift(); for (let i = 0; i < 4; i++) { let nx = x + dx[i]; let ny = y + dy[i]; if (nx < 0 || ny < 0 || nx >= n || ny >= m) { continue; } if (maze[nx][ny] === 1 && visited[nx][ny] === 0) { maze[nx][ny] = maze[x][y] + 1; // 이전 노드의 값에서 +1 한 값 queue.push(nx, ny); } } } } function solution() { for (let row = 0; row < maze.length; row++) { for (let col = 0; col < maze[row].length; col++) { if (maze[row][col] === 1) { // 1인 시작점을 만나면 BFS(row, col); // BFS 시작하고, break break; } } } console.log(maze[n - 1][m - 1]); } const dx = [-1, 1, 0, 0]; // 좌, 우 const dy = [0, 0, -1, 1]; // 상, 하 let [n, m] = [4, 6]; let maze = [ [1, 0, 1, 1, 1, 1], [1, 0, 1, 0, 1, 0], [1, 0, 1, 0, 1, 1], [1, 1, 1, 0, 1, 1], ]; let visited = [ [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], ]; console.log(solution());
[ 1, 0, 9, 10, 11, 12 ], [ 2, 0, 8, 0, 12, 0 ], [ 3, 0, 7, 0, 13, 14 ], [ 4, 5, 6, 0, 14, 15 ]
'PS > 백준' 카테고리의 다른 글
[ 백준 _ 6588 ] 골드바흐의 추측 ( 수학 - 자바스크립트 ) (1) 2021.06.06 [ 백준 - 1406 ] 에디터 ( 스택 _ 자바스크립트 ) (0) 2021.06.06 [백준 _ 1260] DFS와 BFS ( by using JavaScript ) (0) 2021.06.04 [ 백준 _ 2667 ] 단지번호 붙이기 (DFS) (0) 2021.06.04 [ 백준_2293 ] 동전 1 ( DP, by using JavaScript ) (0) 2021.06.03 댓글