/*
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;
}