Untitled
unknown
plain_text
2 years ago
1.8 kB
4
Indexable
import java.util.Scanner;
public class CleaningRobot {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T = scanner.nextInt();
for (int t = 1; t <= T; t++) {
System.out.println("Case #" + t);
int N = scanner.nextInt();
int M = scanner.nextInt();
int[][] room = new int[N][M];
int startX = 0, startY = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
room[i][j] = scanner.nextInt();
if (room[i][j] == 3) {
startX = i;
startY = j;
}
}
}
int result = cleanRoom(room, startX, startY, 0, N, M);
System.out.println(result == Integer.MAX_VALUE ? -1 : result);
}
}
private static int cleanRoom(int[][] room, int x, int y, int dirtyCount, int N, int M) {
if (x < 0 || x >= N || y < 0 || y >= M || room[x][y] == 2) {
return Integer.MAX_VALUE;
}
if (dirtyCount == 0) {
return 0;
}
int[] dx = {-1, 0, 1, 0};
int[] dy = {0, 1, 0, -1};
int minMoves = Integer.MAX_VALUE;
for (int i = 0; i < 4; i++) {
int newX = x + dx[i];
int newY = y + dy[i];
if (newX >= 0 && newX < N && newY >= 0 && newY < M && room[newX][newY] == 1) {
room[newX][newY] = 0;
int moves = cleanRoom(room, newX, newY, dirtyCount - 1, N, M);
room[newX][newY] = 1;
if (moves != Integer.MAX_VALUE) {
minMoves = Math.min(minMoves, 1 + moves);
}
}
}
return minMoves;
}
}
Editor is loading...