模拟算法,模拟腐烂的过程
class Solution994 {
public static void main(String[] args) {
Solution994 solution994 = new Solution994();
int i = solution994.orangesRotting(new int[][]{new int[]{1, 2}});
System.out.println(i);
}
public int orangesRotting(int[][] grid) {
if (!hasXinxian(grid))
return 0;
for (int i = 1; i < Integer.MAX_VALUE; i++) {
if (!rot(grid, i)) {
if (hasXinxian(grid))
return -1;
else
return i - 1;
}
}
return -1;
}
public boolean hasXinxian(int[][] grid) {
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] == 1)
return true;
}
}
return false;
}
public boolean rot(int[][] grid, int cishu) {
boolean result = false;
for (int i = 0; i < grid.length; i++) {
for (int j = 0; j < grid[0].length; j++) {
if (grid[i][j] >= 2 && grid[i][j] < cishu + 2) {
if (i - 1 >= 0 && grid[i - 1][j] == 1) {
grid[i - 1][j] = cishu + 2;
result = true;
}
if (i + 1 < grid.length && grid[i + 1][j] == 1) {
grid[i + 1][j] = cishu + 2;
result = true;
}
if (j - 1 >= 0 && grid[i][j - 1] == 1) {
grid[i][j - 1] = cishu + 2;
result = true;
}
if (j + 1 < grid[i].length && grid[i][j + 1] == 1) {
grid[i][j + 1] = cishu + 2;
result = true;
}
}
}
}
return result;
}
}