kohj5078   1년 전

벽을 세우는 DFS 메소드에서

public static void dfs(int num) {

    if(num == 3){
        bfs();
        return;
    }
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            if (map[i][j] == 0) {
                map[i][j] = 1;
                dfs(num+1);
                map[i][j] = 0;
            }
        }
    }
}

위의 메소드처럼

시작인덱스를 0, 0 으로 설정했을 때는 모든 경우의 수를 탐색할 수 있었고

public static void dfs(int y, it x, int num) {

    if(num == 3){
        bfs();
        return;
    }
    for (int i = y; i < N; i++) {
        for (int j = x; j < M; j++) {
            if (map[i][j] == 0) {
                map[i][j] = 1;
                dfs(i, j+1, num+1);
                map[i][j] = 0;
            }
        }
    }
}

위의 메소드처럼

시간을 줄이기 위한 목적으로 인덱스를 누적시켜나가면 모든 경우의 수를 탐색할 수 없었는데

그 이유가 궁금합니다..!

djm03178   1년 전

위쪽 줄부터 순차적으로 탐색을 해야 하므로, (i,M-1) 다음은 항상 (i+1,0)을 탐색해야 합니다. 그런데 j의 시작 범위를 x로 한정지었기 때문에 x가 0이 아니라면 이 좌표를 탐색하지 못하게 됩니다.

kohj5078   1년 전

답변 너무 감사드립니다. 이해가 잘 되었어요.

댓글을 작성하려면 로그인해야 합니다.