문제
- 주어진 인접행렬에서 한 정점으로부터 다른 정점으로 이어지는 길이 존재하는지 반환해야 합니다.
입력
- 인자 1: matrix
Array 타입을 요소로 갖는 인접 행렬이 담긴 2차원 배열
- 인자 2: from
Number 타입의 시작 정점
- 인자 3: to
Number 타입의 도착 정점
- 출력
boolean 타입을 리턴해야 합니다.
입출력 예시
const result = getDirections(
[
[0, 1, 0, 0],
[0, 0, 1, 0],
[0, 0, 0, 1],
[0, 1, 0, 0],
],
0,
2
);
console.log(result);
정점 0에서 2로 가는 길이 존재하는지 확인합니다.
0 --> 1 로 가는 간선이 존재하고, 1 --> 2 로 가는 간선이 존재하기 때문에 true를 반환합니다.
Solution
function getDirections(matrix, from, to) {
let queue = [from];
let enqueue = (n) => queue.push(n);
let dequeue = () => queue.shift();
let isVisted = Array(matrix.length).fill(false);
isVisted[from] = true;
while(queue.length > 0) {
let now = dequeue();
if(now === to) return true;
for(let next = 0; next < matrix[now].length; next++) {
if(matrix[now][next] && (isVisted[next] === false)) {
enqueue(next);
isVisted[next] = true;
}
}
}
return false;
}