我正在寻找一种算法,该算法将在具有障碍物的网格中找到给定大小的所有非重叠正方形。所有正方形必须具有相同的大小,并将其作为输入之一。
示例网格,其中黑色单元格代表空白区域,红色单元格代表障碍物。接下来是在网格中找到多个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;
}