Я работал над этим весь день, и я не могу понять, почему этот алгоритм не охватывает всю сетку при запуске с координатной сетки [1] [1].
Я начинаюпутем настройки сетки и вычисления количества строк и столбцов в сетке, чтобы дать мне ограничение по краям массива.
Затем я вызываю функцию, устанавливая сетку положения [1] [1] = 1, вычисляя смещение и проверяя, что оно не находится за пределами массива, и проверяя, что новая позиция еще не была вызвана перед вызовомфункция рекурсивная.
Я просто не могу понять, почему это не работает!
var grid = [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]];
var cols = grid.length;
var rows = grid[0].length;
floodFill(1, 1)
function floodFill(col, row) {
grid[col][row] = 1;
for (c_off = -1; c_off < 2; c_off++) {
for (r_off = -1; r_off < 2; r_off++) {
var i = col + c_off;
var j = row + r_off;
if (i > -1 && i < cols && j > -1 && j < rows) {
if (grid[i][j] != 1) {
floodFill(i, j);
}
}
}
}
}
grid;
/*
output:
[ [ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 0 ],
[ 1, 1, 0, 0, 0 ] ]
expected output:
[ [ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ],
[ 1, 1, 1, 1, 1 ] ]
*/