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

用C语言解决下列问题:Kirill wants to weave the very beautiful blanket consisting of n×m of the same size square patches of some colors. He matched some non-negative integer to each color. Thus, in our problem, the blanket can be considered a B matrix of size n×m consisting of non-negative integers. Kirill considers that the blanket is very beautiful, if for each submatrix A of size 4×4 of the matrix B is true: A11⊕A12⊕A21⊕A22=A33⊕A34⊕A43⊕A44, A13⊕A14⊕A23⊕A24=A31⊕A32⊕A41⊕A42, where ⊕ means bitwise exclusive OR Kirill asks you to help her weave a very beautiful blanket, and as colorful as possible! He gives you two integers n and m . Your task is to generate a matrix B of size n×m , which corresponds to a very beautiful blanket and in which the number of different numbers maximized. Input The first line of input data contains one integer number t (1≤t≤1000 ) — the number of test cases. The single line of each test case contains two integers n and m (4≤n,m≤200) — the size of matrix B . It is guaranteed that the sum of n⋅m does not exceed 2⋅105 . Output For each test case, in first line output one integer cnt (1≤cnt≤n⋅m) — the maximum number of different numbers in the matrix. Then output the matrix B (0≤Bij<263) of size n×m . If there are several correct matrices, it is allowed to output any one. It can be shown that if there exists a matrix with an optimal number of distinct numbers, then there exists among suitable matrices such a B that (0≤Bij<263) .
03-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值