반응형
문제
방향그래프가 주어지면 1번 정점에서 N번 정점으로 가는 모든 경로의 가지 수를 출력하는 프 로그램을 작성하세요. 아래 그래프에서 1번 정점에서 5번 정점으로 가는 가지 수는 총 6 가지입니다.
풀이
function solution(n, arr) {
let ch = Array.from({ length: n + 1 }, () => 0);
let graph = Array.from({ length: n + 1 }, () => []);
let answer = 0;
for (let [a, b] of arr) {
graph[a] = [...graph[a], b];
}
console.log(graph);
function DFS(v) {
if (v === n) answer += 1;
else {
for (let i = 0; i < graph[v].length; i++) {
const next = graph[v][i]; // 정점 번호
if (ch[next] === 0) {
ch[next] = 1;
DFS(next);
ch[next] = 0;
}
}
}
}
ch[1] = 1;
DFS(1);
return answer;
}
효율성을 위해 각 정점에서 갈 수 있는 정점 번호를 리스트로 저장한다.
그러면 각 정점에서 graph[v].length만큼만 돌면 된다.
<인접 리스트 vs. 인접 행렬>
그래프의 노드 개수가 많을 때는 인접 리스트를 쓰고, 노드 개수가 100개 이하면 인접 행렬을 써도 무방하다고 한다.
반응형
'Algorithm > Inflearn' 카테고리의 다른 글
[알고리즘/인프런] 송아지 찾기 (0) | 2023.05.21 |
---|---|
[알고리즘/인프런] 미로탐색 (0) | 2023.05.21 |
[알고리즘/인프런] 경로 탐색(인접행렬) (0) | 2023.05.21 |
[알고리즘/인프런] 수들의 조합 (1) | 2023.05.21 |
[알고리즘/인프런] 조합 구하기 (0) | 2023.05.21 |