Я ищу алгоритм, который бы нашел все непересекающиеся квадраты заданного размера в сетке с препятствиями.Все квадраты должны иметь одинаковый размер, который будет указан как один из входных данных.
Пример сетки с черными ячейками, представляющими пустое пространство, и красными ячейками, представляющими препятствия.Далее приведен пример решения с несколькими желтыми квадратами 5x5, найденными в сетке:
Что у меня есть до сих порэто алгоритм, который находит наибольшую площадь с помощью динамического программирования, но я не знаю, будет ли он полезен для вышеуказанной проблемы.Возможно, это можно изменить, чтобы найти несколько квадратов.
var width = 10, height = 10;
var grid = new Array(width * height);
var sizes = new Array(width * height);
function findBiggestSquare() {
var bestSize = -1, bestLocation = -1;
for (var i = grid.length - 1; i >= 0; i--) {
var size = 0;
if (grid[i] === 0) {
size = 1 + Math.min(sizes[i+1], sizes[i+width], sizes[i+1+width]);
if (size > bestSize) {
bestSize = size;
bestLocation = i;
}
}
sizes[i] = size;
}
if (bestLocation !== -1)
return {'size': bestSize, 'location': bestLocation};
else
return null;
}