๐ฉ๐ป๐ป๋ฌธ์ ๋งํฌ
[์ธํ๋ฐ ์น์
] ๊ฒฝ๋กํ์ ์ธ์ ํ๋ ฌ (Javascript)
์ ๋ฃ ๊ฐ์์ธ ๊ด๊ณ๋ก ๋ฌธ์ ์ค๋ช
์ ์๋ตํฉ๋๋ค.
โ๏ธIdea Sketch
2021-06-30
1. 1๋ฒ ์ ์ ์์ N๋ฒ ์ ์ ์ผ๋ก ๊ฐ๋ ๋ชจ๋ ๊ฒฝ๋ก์ ๊ฐ์ง ์
2. DFS ์ข ๋ฃ์กฐ๊ฑด
- v๊ฐ 5์ผ ๋ ์ข ๋ฃ
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);