В двумерной сетке каждая ячейка представляет собой либо зомби, либо человека. Зомби могут каждый день превращать соседние (сверху/вниз/влево/вправо) людей в зомби. Узнайте, сколько дней нужно, чтобы заразить всех людей?
Входные данные:
матрица, массив двумерных целых чисел, где a[i][j] = 1 представляет собой зомби в ячейке, а a[i][j] = 0 представляет человека в ячейке.
Вывод:
Возвратите целое число, указывающее, сколько дней потребуется, чтобы заразить всех людей.
Возвратите -1, если зомби не существует.
Пример:
Ввод:
[[0, 1, 1, 0, 1],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 1],
[0, 1, 0, 0, 0]]
Выход:
2
Объяснение:
В конце дня 1 состояние сетки:
[[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
[0, 1, 0, 1, 1],
[1, 1, 1, 0, 1]]
В конце дня 2 состояние сетки:
[[1, 1, 1, 1, 1],
[1, 1, 1, 1, 1],
> [1, 1, 1, 1, 1],
[1, 1, 1, 1, 1]]
Решение :-
импортировать java.util.LinkedList;
импортировать java.util.Queue;
открытый класс ZombiMatrix {
public static void main(String[] args) {
узел класса {
внутренний ряд;
внутренний столбец;
публичный узел (int i, int j) {
ряд = я;
столбец = j;
}
}
час = -1;
//влево/вправо/вверх/вниз
int direction[][] = {{0,-1}, {-1, 0}, {1,0}, {0,1}};
Queue‹Node› queue = new LinkedList‹Node›();
матрица int[][] = {{0, 1, 1, 0, 1},
{0, 1, 0, 1, 0},
{0, 0, 0, 0, 1},
{0, 1, 0, 0, 0}};
for (int i = 0; i ‹ matrix.length; i++) {
for (int j = 0; j ‹ matrix[0].length; j++) {
если (матрица [я] [j] == 1) {
queue.add (новый узел (i, j));
}
}
}
пока(!queue.isEmpty()) {
int InitialSize = очередь.размер();
for (int i = 1; i ‹= initialSize; i++) {
Узел tempNode = queue.poll();
for(int[] dir: направление) {
int x = tempNode.row + dir[0];
int y = tempNode.column + dir[1];
if(x ›= 0 && x ‹ matrix.length
&& y ›= 0 && y ‹ matrix[0].length
&& матрица[x][y] == 0) {
матрица[х][у] = 1;
queue.add (новый узел (x, y));
}
}
}
час++;
}
System.out.println(час); //вернуть час;
}
}