C代码:BFS
// 这玩意没法用DFS,它是一层一层来的,DFS直接就是干到底了~
int orangesRotting(int** grid, int gridSize, int* gridColSize){
int cnt = -1;
int fresh = 0;
int m = gridSize, n = gridColSize[0];
const int dir[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
int que[m*n][2];
int top = 0;
memset(que, 0, sizeof(int) * m * n);
for (int i = 0; i < m; ++i) {
for (int j = 0; j <n; ++j) {
if (grid[i][j] == 2) {
que[top][0] = i; // 多个起始点
que[top++][1] = j;
} else if (grid[i][j] == 1) {
fresh++;
}
}
}
int l = 0;
while (l < top) {
int len = top - l;
++cnt;
while (len--) { // 遍历层,多个起始点,作为一层,进行BFS周围扩散!
int x = que[l][0];
int y = que[l++][1];
for (int i = 0; i < 4; ++i) {
int dx = x + dir[i][0];
int dy = y + dir[i][1];
if (dx < 0 || dx >= m || dy < 0 || dy >= n || grid[dx][dy] != 1) {
continue;
}
grid[dx][dy] = 2;
--fresh;
que[top][0] = dx;
que[top++][1] = dy;
}
}
}
return fresh > 0 ? -1 : (cnt < 0 ? 0 : cnt); // [[0]], 一定要考虑到所有用例
}