www.geeksforgeeks.org/shortest-path-in-a-binary-maze/?ref=lbp
- 문제 내용
M x N 사이즈의 Grid에서 [0,0]을 소스로 하고 [M-1,N-1]을 목적지로 한 1과 0으로만 만들어진 Maze에서 출력 가능한 모든 Path를 출력하라. (최소 패스도 가능)
- 접근 방법 : BFS Search
BFS Search를 위해서는 다음 고려사항을 생각해야 한다.
- Queue를 만들 것
- count 1회에 들어온 모든 Queue를 소비하고 count를 1 증가 시킬 것
- Visited 된 Cell은 다시 Queue에 넣지 말것
- End를 만나면 해당 Path는 종료 시킬 것
-> 이 부분을 return count로 하게 되면 최소 Path count 값을 출력 할 수 있다.
if (row == maze.length - 1 && col == maze[0].length - 1) {
return count;
}
마지막으로 모든 Path를 trace 하는 것이다.
이 부분이 다소 까다로운데 두가지 접근이 가능할 것 같다.
- queue 루프를 다 돌고 나서 destination 부터 이웃 cell의 count 숫자를 보고 1씩 줄여나가면서 path를 print한다.
- queue 루프를 돌때 모든 경우의 path를 유지 시킨다.
아래 코드는 위의 2번을 구현한 코드다. 아무래도 1번 같은 경우 한번더 dfs를 해야한다는 부담이 있다.
function solution(maze) {
let scoreArr = new Array(maze.length).fill(0).map(_=> new Array(maze[0].length).fill(0));
let queue = new Array();
queue.push([[0, 0]]);
let count = 1;
let resultPath = new Array();
while(0 < queue.length){
let length = queue.length;
for (let i = 0; i < queue.length; i++) {
let path = queue.shift();
let [row, col] = path[path.length -1];
if (row == maze.length - 1 && col == maze[0].length - 1) {
resultPath.push(path);
continue;
}
if (0 < scoreArr[row][col]) continue;
scoreArr[row][col] = count;
//north
if (0 < row && maze[row - 1][col] == 0 && 0 == scoreArr[row - 1][col]) {
path.push([row - 1, col]);
queue.push(path);
}
//south
if (row + 1 < maze.length && maze[row + 1][col] == 0 && 0 == scoreArr[row + 1][col]){
path.push([row + 1, col]);
queue.push(path);
}
//west
if (0 < col && maze[row][col - 1] == 0 && 0 == scoreArr[row][col - 1]) {
path.push([row, col - 1]);
queue.push(path);
}
//east
if (col + 1 < maze[0].length && maze[row][col + 1] == 0 && 0 == scoreArr[row][col + 1]) {
path.push([row, col + 1]);
queue.push(path);
}
}
count++;
}
return resultPath;
};
let result = solution([[0, 0, 0, 0], [1, 1, 1, 0], [0, 0, 0, 0], [0, 1, 1, 1],[0, 0, 0, 0]]);
728x90
반응형
'Problem Solving' 카테고리의 다른 글
1022. Sum of Root To Leaf Binary Numbers (0) | 2020.09.08 |
---|---|
157. Read N Characters Given Read4 (0) | 2020.09.08 |
Word Pattern (0) | 2020.09.07 |
835. Image Overlap (0) | 2020.09.07 |
1579. Remove Max Number of Edges to Keep Graph Fully Traversable (0) | 2020.09.06 |