max submatrix which has all borders the same color.

本文介绍了一种算法,用于在一个黑白填充的正方形矩阵中找到最大的子正方形,该子正方形的所有四个边界都由黑色像素填充。通过迭代检查每个可能的子正方形并验证其边界来实现这一目标。
/*
  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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值