DFS를 사용하여 입력 받은 n 값에 대한 부분 집합을 출력하는 알고리즘 작성
public class SubSet {
static int n;
static int[] ch;
public static void main(String[] args) {
SubSet ss = new SubSet();
n = 3;
ch=new int[n+1];
ss.DFS(1);
}
public void DFS(int l){
if(l==n+1) {
for(int i=1; i<=n; i++){
if(ch[i] == 1) System.out.print(i+" ");
}
System.out.println();
}
else{
ch[l]=1; //1은 사용
DFS(l+1); //트리 왼쪽
ch[l]=0; //0은 사용하지 않는다.
DFS(l+1); //트리 오른쪽
}
}
}
DFS를 사용한 트리 구조를 이해하기 위한 문제이다. 위의 코드의 예제를 통해 코드 실행의 구조를 하나씩 이해해보자! 무조건 이해해야한다 ㅜㅜ 어려우면 또 풀어보고 또 풀어보자!
ch[l]=0
DFS(l+1)
은 아직 실행되지 않고 jvm에 쌓여있는 메서드들을 하나씩 실행해줘야 다음줄로 넘어갈 수 있다.ch[3]=0
DFS(4)
DFS를 사용하여 트리구조의 알고리즘 풀이