一个M*N的矩阵,元素取值1或0,问如何找到最大的矩阵,其所有的元素都为0

一个M*N的矩阵,元素取值1或0,问如何找到最大的矩阵,其所有的元素都为0,第1张

给一个效率比较高的算法吧

假设存有矩阵的是int mat[][]

1对每行分别计算该行某个元素之后有多少个连续的0(包括它本身),记录进数组int a[][]中

比如mat[0][0]、mat[0][1]、、mat[0][10]都是0,而mat[0][11]是1,那么记录a[0][0]=11,a[0][1]=10,,a[0][10]=1,a[0][11]=0

这个步骤用循环次数为mn的双层循环即可实现

2枚举所求矩阵的左上角坐标,然后枚举这个矩阵的行数,利用之前记录的a数组可知这个矩阵的列数,如此得到一个左上角坐标和行数已知的尽可能大的全0子矩阵,然后判断这个子矩阵大小是否最大的,是则记录

代码大致如下

for (i=0;i<m;i++)//枚举左上角所在的行

for (j=0;j<n;j++)//枚举左上角所在的列

{

int c=a[i][j];//变量c用于记录当前所得子矩阵的列数

for (r=1;i+r<=n;r++)//枚举子矩阵的行数

{

if (a[i+r-1][j]<c) c=a[i+r-1][j];//判断是否行数增加后子矩阵的列数会减少

if (rc>S) ;//变量S记录当前求得的最大全0矩阵的大小

}

}

Print Tab(5 j); Mat(i, j)这里最后直接加个;就OK了。

Sum = Sum + Mat(i, j)这里的Mat(i, j)改成Mat(3, j)就行了,因为是要求第三行的元素之和,所以改成3。

此是最佳答案,望采纳。

这个代码是偏matlab风格的,意思就是以矩阵为基础来进行的计算或者比较,你这个时候应该把UCHAR_MAX看成是大小与oROI一样,每个元素都为UCHAR_MAX的矩阵,然后把每个UCHAR_MAX中和oROI中的对应位置上的元素相比较,得到的结果仍然还是一个大小与oROI一样的矩阵,这个时候它的元素就应该是0或者1了,那么countNonZero就是计算这个矩阵中1的个数。所以能用int a = (oROI<UCHAR_MAX)&(oROI>0)类型是不匹配的

设矩阵元素为mat[i][j],则主对角线上元素下标满足i==j

C语言代码如下:

#include<stdioh>

int main() {

  int mat[4][4] = {

      {1, 2, 3, 4},

      {5, 6, 7, 8},

      {9, 10, 11, 12},

      {13, 14, 15, 16}

  };

  int i, j;

  printf("主对角线上行列下标都为奇数的元素为:");

  for (i = 0; i < 4; i++) {

      for (j = 0; j < 4; j++) {

          if (i == j && i % 2 == 1)

              printf("%d ", mat[i][j]);

      }

  }

  printf("\n");

  return 0;

}

运行结果如下:

在对SynthText的gtmat中的wordBB中的数据进行处理时,我遇到一个问题:确保每一个值都在[0,1]内。如果用循环,就没有体现出python的逼格。于是找了三种方法(仅展示使每一个元素都小于1的方法)

以上就是关于一个M*N的矩阵,元素取值1或0,问如何找到最大的矩阵,其所有的元素都为0全部的内容,包括:一个M*N的矩阵,元素取值1或0,问如何找到最大的矩阵,其所有的元素都为0、vb 知识。,程序改错。 将M行M列二维数组Mat 中的元素按照矩阵的形式输出,并计算第三行个元素之和、关于opencv mat类型和countNonZero函数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9568403.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存