n * n의 숫자로 되어 있는 격자에 k개의 나라를 방문하는데, 이 나라와 인접하고 차이가 u이상 d이하면 방문 할 수 있다.
이때 방문할 수 있는 최대 나라의 수는?
public static void find(boolean[][] visited, int cnt, int kCnt) {
if (kCnt == k + 1) {
max = Math.max(max, cnt);
return;
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (!visited[i][j]) {
// 방문 상태 복사
boolean[][] nextVisited = copyVisited(visited);
Queue<int[]> q = new LinkedList<>();
q.add(new int[]{i, j});
nextVisited[i][j] = true;
int localCnt = 1; // 현재 시작점 포함
while (!q.isEmpty()) {
int[] tmp = q.poll();
int x = tmp[0];
int y = tmp[1];
for (int d = 0; d < 4; d++) {
int nx = x + dx[d], ny = y + dy[d];
if (inRange(nx, ny) && !nextVisited[nx][ny] && diff(x, y, nx, ny)) {
nextVisited[nx][ny] = true;
q.add(new int[]{nx, ny});
localCnt++;
}
}
}
find(nextVisited, cnt + localCnt, kCnt + 1); // 백트래킹 재귀
}
}
}
}