C++ 当值等于指定值时,从较大的矩阵中提取未知大小的子矩阵

C++ 当值等于指定值时,从较大的矩阵中提取未知大小的子矩阵,c++,matrix,submatrix,C++,Matrix,Submatrix,假设我们有一个矩阵: 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 我们需要这些产出: 子矩阵1: 1 1 1 1 1 1 1 1 1 子矩阵2: 1 1 1 1 1 1 矩阵大小可以变化,子矩阵大小也可以变化,但它们将具有方形或矩形形状。只有0和1 我该怎么做?有什么算法可以做到这一点吗 for (i=

假设我们有一个矩阵:

0 0 0 0 0 0 0 0 
0 1 1 1 0 0 0 0
0 1 1 1 0 0 0 0 
0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 0
0 0 0 0 1 1 1 0

我们需要这些产出:

子矩阵1:

1 1 1
1 1 1
1 1 1

子矩阵2:

1 1 1
1 1 1

矩阵大小可以变化,子矩阵大小也可以变化,但它们将具有方形或矩形形状。只有0和1

我该怎么做?有什么算法可以做到这一点吗

for (i=0; i<m;i++){
    for (j=2; j<n; j++){
        if ( A[i+1,j]==1 && A[i,j+1]==1 || A[i+1,j]==1 && A[i,j-1]==1 || A[i-1,j]==1 && A[i,j+1]==1 || A[i-1,j]==1 && A[i,j-1]==1 || A[i-1,j]==1 && A[i+1,j]==1 && A[i,j-1]==1 && A[i,j+1]==1 )
           B[i,j]=A[i,j];


        }
}

对于(i=0;i)什么是允许的最大和最小子矩阵大小?允许的大小=(1,1)吗?输入是否仅为0和1?矩阵是否始终为二次矩阵?@RoQuOTriX您应该仔细阅读,这些信息已经提供。句子“and仅为0和1”没有语义内容。什么是0和1?你指的是子矩阵的大小,但如果允许使用1元素矩阵,就不要回答我的问题。每个矩阵都有正方形或矩形的形式,所以这些信息根本没有帮助,只是为了好玩:你会如何处理这个问题(不止一个解决方案)1?0,0,新线,1,1,1,新线1,1,1,新的线,但是不管C++和编码……只是用纸和铅笔。1 0 0新行{新}×新行的解是什么?