코딩테스트
[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);
}
}