Steward
分享是一種喜悅、更是一種幸福
程式語言 - LeetCode - C - 994. Rotting Oranges
題目:

解答:
#define MAX_SIZE 10000
int orangesRotting(int **grid, int gridSize, int *gridColSize)
{
int r = 0;
int i = 0;
int j = 0;
int st = 0;
int ep = 0;
int **q = NULL;
q = calloc(MAX_SIZE, sizeof(int *));
for (i = 0; i < MAX_SIZE; i++) {
q[i] = calloc(2, sizeof(int) * 2);
}
st = 0;
for (i = 0; i < gridSize; i++) {
for (j = 0; j < gridColSize[i]; j++) {
if (grid[i][j] == 2) {
q[ep][0] = i;
q[ep][1] = j;
ep += 1;
}
}
}
while ((ep - st) > 0) {
int row = 0;
int col = 0;
int len = ep;
int valid = 0;
int dir[] = { -1, 0, 1, 0, -1 };
for (i = 0; i < len ; i++) {
for (j = 0; j < 4; j++) {
col = q[i][0] + dir[j];
row = q[i][1] + dir[j + 1];
if ((row < 0) || (col < 0) || (row >= gridColSize[0]) || (col >= gridSize)) {
continue;
}
if (grid[col][row] == 1) {
q[ep][0] = col;
q[ep][1] = row;
ep += 1;
grid[col][row] = 2;
valid = 1;
}
}
}
st += 1;
r += valid;
}
for (i = 0; i < gridSize; i++) {
for (j = 0; j < gridColSize[i]; j++) {
if (grid[i][j] == 1) {
return -1;
}
}
}
return r;
}