728x90
๐ section09 - 2 - ๊ฒฝ๋ก ํ์(์ธ์ ํ๋ ฌ)
๋ฐฉํฅ ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ง๋ฉด 1๋ฒ ์ ์ ์์ N
๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ๋ชจ๋ ๊ฒฝ๋ก์ ๊ฐ์ง ์๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ๋ ๋ฌธ์ ๋ค. ์๋ฅผ ๋ค์ด 1๋ฒ ์ ์ ์์ 5๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ๊ฐ์ง ์๋ ๋ค์๊ณผ ๊ฐ๋ค.

1 2 3 4 5 1 2 5 1 3 4 2 5 1 3 4 5 1 4 2 5 1 4 5
์ด ๋ฌธ์ ๋ DFS
๋ฅผ ์ด์ฉํด์ ํ ์ ์๋ค. ๊ฒฝ๋ก์ ๊ฐ์ง์๋ง ์ถ๋ ฅํ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฐ๋ฅด๊ฒ ์ด๋ํ๋์ง ์๊ธฐ ์ํด path
๋ณ์๋ฅผ ์ถ๊ฐํ๋ค.
- 2์ฐจ์ ๋ฐฐ์ด์
graph
๋ฅผ ์ ์ธํ์ฌ ์ ์ ๊ณผ ๊ฐ์ ์ ์ ๋ณด๋ฅผ ๋ฃ๋๋ค. visited
๋ฐฐ์ด์ ์ ์ธํ์ฌ ์ด๋ฏธ ์ง๋์จ ๊ณณ์ ๊ฑด๋๋ฐ๊ณ ์งํํ๋ค.DFS
์ ์ข ๋ฃ ์กฐ๊ฑด์v
๊ฐn
๊ณผ ๊ฐ์ ๋์ด๋ค.- ์ธ์ ํ๋ ฌ์ด๋ฏ๋ก ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ชจ๋ ์ ์ ์ ํ์ํด์ผ ํ๋ค.
DFS
ํจ์๋ฅผ ๋๋ฆฌ๊ธฐ ์ 1๋ฒ ์ ์ ์์ ์์ํ๋ฏ๋กvisited[1]=1
์ ์ ์ธํ๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด 1๋ฒ ์ ์ ์ ์ค๋ณต ๋ฐฉ๋ฌธํ๋ค.

728x90
let n = 5; let m = 9; let arr = [ [1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 5], [3, 4], [4, 2], [4, 5], ]; console.log(solution(n, m, arr)); function solution(n, m, arr){ let visited = Array.from({length: n+1}); let graph = Array.from(Array(n+1), () => Array(n+1).fill(0)); let path = [] let cnt=0; for (let [a, b] of arr) graph[a][b] = 1; // graph์ ๊ฐ ๋ฃ๊ธฐ function DFS(v){ if (v === n){ console.log(path); // ๊ฒฝ๋ก ์ถ๋ ฅ cnt++; // ๊ฒฝ๋ก์ ๊ฐ์ง ์ ์ถ๋ ฅ }else{ for (let i=1; i<=n; i++){ if (!visited[i] && graph[v][i]){ visited[i] = 1; path.push(i) DFS(i); visited[i] = 0; path.pop() } } } } path.push(1); visited[1]=1; DFS(1); return cnt; } ๐๐ฝ [ 1, 2, 3, 4, 5 ] [ 1, 2, 5 ] [ 1, 3, 4, 2, 5 ] [ 1, 3, 4, 5 ] [ 1, 4, 2, 5 ] [ 1, 4, 5 ] 6
๋ฐ์ํ
๋๊ธ