μ½λ©ν
μ€νΈ
[DFS] 12. κ²½λ‘νμ
μν리ν°μ§νΈ
2024. 2. 8. 07:19
<<νμ΄>>
μ΄λ²μλ κ²½λ‘νμμ DFS λ°©μμΌλ‘ νμλ€.
μ΄λ² 1λ²μμ 5λ²κΉμ§ κ°λ κ²½λ‘ κ°―μλ₯Ό νμνλ κ²μΈλ°
μ°μ 1λ²μ΄ κ° μ μλ κ°μ΄ κ°μ μΌλ‘ μ°κ²°λμ΄ μλ μκΈ° μμ μ μ μΈν κ°μ΄λ€.
κ·Έ κ°μ΄ μλ€λ©΄ κ·Έ κ°μΌλ‘ μ΄λμ νκ³ λκ°μ κ°μΌλ‘λ κ° μ μκΈ°μ ch(체ν¬) λ°°μ΄μ κ·Έκ°κ³Ό κ°μ μΈλ±μ€μ 1μ μΆκ°ν΄μ€λ€.
μ΄λ² λ¬Έμ λ₯Ό νλ©΄μ
DFS λ°©μμ DFS(n + 1) λλ DFS(2n) κ³Ό μ΄μ DFS(n)κ³Ό μ°κ΄(μ°μ° λ±)λμ΄ μμ§μμ§λ§, μ΄λ²μλ μ°κ΄μ΄ μλ€κΈ° λ³΄λ€ λ§μ‘±νλ κ°μ΄ λ€μ΄κ°μ μ¬κ·ν¨μλ₯Ό μ¬μ©νλ€.
μ΄λ κ² μ¬λ¬κ°μ§ DFSλ₯Ό 보λ μ‘°κΈ λ κ°μ μ‘μ μ μλ κ³κΈ°κ° λμλ€!!
import java.util.Scanner;
class Main {
static int n, m, answer = 0;
static int[][] arr;
static int[] ch;
public void DFS(int v) {
if(v == n) answer++;
else {
for (int i = 0; i <= n ; i++) {
if(arr[v][i] == 1 && ch[i] == 0) {
ch[i] = 1;
DFS(i);
ch[i] = 0;
}
}
}
}
public static void main(String[] args) {
Main T = new Main();
Scanner in = new Scanner(System.in);
arr = new int[m + 1][m + 1];
n = in.nextInt();
m = in.nextInt();
ch = new int[j + 1];
for(int i = 0; i < m; i++) {
int a = in.nextInt();
int b = in.nextInt();
arr[a][b] = 1;
}
ch[1] = 1;
T.DFS(1);
System.out.println(answer);
}
}