14502번 - 연구소
벽을 세우는 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; } } } }
시간을 줄이기 위한 목적으로 인덱스를 누적시켜나가면 모든 경우의 수를 탐색할 수 없었는데
그 이유가 궁금합니다..!
위쪽 줄부터 순차적으로 탐색을 해야 하므로, (i,M-1) 다음은 항상 (i+1,0)을 탐색해야 합니다. 그런데 j의 시작 범위를 x로 한정지었기 때문에 x가 0이 아니라면 이 좌표를 탐색하지 못하게 됩니다.
답변 너무 감사드립니다. 이해가 잘 되었어요.
댓글을 작성하려면 로그인해야 합니다.
kohj5078 1년 전
벽을 세우는 DFS 메소드에서
위의 메소드처럼
시작인덱스를 0, 0 으로 설정했을 때는 모든 경우의 수를 탐색할 수 있었고
위의 메소드처럼
시간을 줄이기 위한 목적으로 인덱스를 누적시켜나가면 모든 경우의 수를 탐색할 수 없었는데
그 이유가 궁금합니다..!