
[์ธํ๋ฐ ์น์
] ๊ฒฝ๋กํ์ ์ธ์ ํ๋ ฌ (Javascript)
์ ๋ฃ ๊ฐ์์ธ ๊ด๊ณ๋ก ๋ฌธ์ ์ค๋ช
์ ์๋ตํฉ๋๋ค.
โ๏ธIdea Sketch
2021-06-30
1. 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ๋ชจ๋ ๊ฒฝ๋ก์ ๊ฐ์ง ์
2. DFS ์ข
๋ฃ์กฐ๊ฑด
if (v === n) return;
3. DFS ๋ก์ง
- DFS(v) v๋ ์ ์
- for() ๋ฐ๋ณต๋ฌธ์ ์ด์ฉํด ์์์ ์ด v์ธ ๋ชจ๋ ๋ฐฐ์ด ์ํ
| for (let x of arr) { |
| if (x[0] === v) { |
| arr.push(v); |
| DFS(x[1]); |
| arr.pop(); |
| } |
| } |
4. 1 -> 2 -> 4 -> 1 ์ฒ๋ผ ๊ณ์ ์ํํ๋ ๊ฒฝ์ฐ
- visited ๋ฐฐ์ด ์ถ๊ฐ
- visited๊ฐ false์ธ ๊ฒฝ์ฐ์๋ง DFS ์ํ
- ๋ฐฉ๋ฌธํ์ง ์์ ๋
ธ๋๋ง ๋ฐฉ๋ฌธ
let visited = Array.from({ length: n + 1 }, () => false);
4. DFS ๋ก์ง ์์
- DFS(v)๋ฅผ ์ํํ๋ฉด ๋ฐฉ๋ฌธํ์, res.pushํ๊ธฐ
| function DFS(v) { |
| visited[v] = true; |
| res.push(v); |
| } |
5. graph ๋ง๋ค๊ธฐ
| let graph = Array.from({ length: n + 1 }, () => Array.from({ length: n + 1 }, () => 0)); |
| |
| for (let [a, b] of arr){ |
| graph[a][b]=1; |
| } |
โ๏ธ์์ค์ฝ๋
2021-06-30
| let n = 5; |
| let arr = [[1, 2], [1, 3], [1, 4], [2, 1], [2, 3], [2, 5], [3, 4], [4, 2], [4, 5]]; |
| let visited = Array.from({ length: n + 1 }, () => false); |
| |
| let res = []; |
| let cnt = 0; |
| |
| function DFS(v) { |
| visited[v] = true; |
| res.push(v); |
| |
| if (v === n) { |
| cnt++; |
| return; |
| } |
| |
| for (let x of arr) { |
| if (v === x[0] && !visited[x[1]]) { |
| DFS(x[1]); |
| res.pop(); |
| visited[x[1]] = false; |
| } |
| } |
| } |
| |
| DFS(1); |
| console.log(cnt); |