在只有0和1的矩阵中找出边长最大的全1矩阵
2014-09-25 21:14
120 查看
在一个A*B的矩阵中,只包含0和1,从矩阵中找出边长最大的全1子矩阵。
输入行数和列数
输出最大边长。
输入行数和列数
输出最大边长。
#include <iostream> using namespace std; int x[400][400] = {0}; int upperbound[400][400] = {0}; int a(0),b = 0,temp(0); //更新为,本行中,x[i][j]的前面连续的1的个数+1; void pre() { for (int i = 0;i<a;i++) { for (int j = 1;j<b;j++) { if (x[i][j] == 1&&x[i][j-1] !=0) { x[i][j] = x[i][j-1] +1; } } } } //上下检索,大于本身,则cnt+1 int serach_up_down(int row,int col) { int cnt = 1,val = x[row][col]; for (int i = row-1;i>=0;i--) { if (x[i][col] >=val) { cnt++; } else { break; } } for (int i = row+1;i<a;i++) { if (x[i][col]>=val) { cnt++; } else { break; } } if (val>cnt) { return cnt; } else { return val; } } //循环遍历找出 int getMax() { int length = 0; for (int i = 0 ;i<a;i++) { for (int j = 0;j<b;j++) { if (x[i][j] != 0) { int val = serach_up_down(i,j); if (val>length) { length = val; } } } } return length; } int main() { cout<<"请输入行数和列数"<<endl; cin>>a>>b; for (int i = 0;i<a;i++) { for (int j = 0;j<b;j++) { cin>>temp; x[i][j] = temp; } } pre(); //预处理 cout<<getMax()<<endl; }
相关文章推荐
- 7.找出矩阵中行最大列最小的数
- 矩阵n*m找出最大值的行列号及值
- R语言-找出向量或矩阵中的最大10个数
- 20.找出N*N矩阵中列最大值并输出
- 然后找出全部元素中的最大值和最小值。 用C++做1、从键盘输入3行3列矩阵的元素
- 给定一个正整数和负整数组成的N*N矩阵,编写代码找出元素总和最大的子矩阵。
- 软工随堂练 找出和值最大的子矩阵 尹亚男 赵静娜
- 华为机考 给你一个N*M的矩阵,每个位置的值是0或1,求一个面积最大的子矩阵,这个矩阵必须是一个正方形,且里面只能由1构成,输出最大的正方形边长。其中n,m<=400;
- 04_N阶楼梯上楼问题、输入一个ip地址串,判断是否合法、输入一个四行五列的矩阵,找出每列最大的两个数
- 05年华中科大机试第二题(输入一个四行五列的矩阵,找出每列最大的两个数)
- 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。
- 20.找出矩阵中最大的数存入数组中
- 6-2 找出矩阵中最大值所在的位置
- 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。
- 找出矩阵中的最大矩形
- 从键盘为3*3的矩阵输入数据,找出主对角线上最大的元素,以及所在的行号
- 程序员面试金典——解题总结: 9.18高难度题 18.12给定一个正整数和负整数组成的N*M矩阵,编写代码找出元素总和最大的子矩阵。
- 最大子矩阵和问题
- 最大子矩阵和问题、
- 在规模为n的数据元素集合中找出最大元