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
๋ฐ์ํ
๋๊ธ