/*
Imagine you have a square matrix, where each cell is filled with either black or white.
Design an algorithm to find the maximum subsquare such that all four borders are filled
with black pixels.
*/
struct Subsquare {
int row;
int col;
int size;
Subsquare(int r, int c, int sz) : row(r), col(c), size(sz) {}
};
Subsquare findMaxSquare(vector< vector<int> >& matrix) {
int N = matrix.size();
Subsquare sq = NULL;
int col = 0;
int currentMaxSize = 0;
while(N - col > currentMaxSize) {
for(int row = 0; row < matrix.size(); ++row) {
int size = N - max(row, col);
while(size > currentMaxSize) {
if(isSquare(matrix, row, col, size)) {
currentMaxSize = size;
sq = new Subsquare(row, col, size);
break;
}
size--;
}
}
col++;
}
return sq;
}
static bool isSquare(vector< vector<int> >& matrix, int row, int col, int size) {
for(int j = 0; j < size; ++j) {
if(matrix[row][col + j] == 1) return false;
if(matrix[row + size - 1][col + j] == 1) return false;
}
for(int i = 1; i < size - 1; ++i) {
if(matrix[row + i][col] == 1) return false;
if(matrix[row + i][col + size - 1]) return false;
}
return true;
}
max submatrix which has all borders the same color.
最新推荐文章于 2021-07-25 21:13:21 发布
本文介绍了一种算法,用于在一个黑白填充的正方形矩阵中找到最大的子正方形,该子正方形的所有四个边界都由黑色像素填充。通过迭代检查每个可能的子正方形并验证其边界来实现这一目标。
4905

被折叠的 条评论
为什么被折叠?



