单位矩阵题解

单位矩阵

题目描述
X是一个灰常讨厌数学的学生,所以想请你帮他解决一个简单的关于矩阵的问题。给定一个只有0和1构成的大小为M*N的矩阵,在其中找到最大的子单位矩阵。单位矩阵是指主对角线上元素全部为1,其余元素全部为0的方阵。主对角线是指左上角到右下角方向的对角线。数据规模(1<=M,N<=1000)。
输入格式
多组数据输入,每组第一行输入M和N,空格分开,接下来M行输入矩阵数据,每行N个元素,输入以文件尾(EOF)结束。
输出格式
对于每组数据,输出该矩阵中最大子单位矩阵的行数,每次输出独占一行。
输入样例 复制
5 6
010000
010001
010000
001000
100111
2 5
01000
00110
输出样例 复制
3
2

解题思路:
看见这个题的时候 感觉应该用深搜…但是没写出来
后来就完全凭感觉写的 提交2遍ac

我的思路就是 遍历这个二维字符数组 当遇到‘1’的时候就进入sou函数来找从当前位置开始 递归 往右下方(对角线方向)找看有几个‘1’ 每次遇到‘1’就cnt++,确定下从当前i,j点能扩大多少(先不管别的位置是否满足都是‘0’这个条件 我设置这个函数的目的就是减少循环次数 因为如果不先确定下大概范围 直接for循环开始找 我个人觉得比较耗时)
当递归函数返回到主函数后 我再用while(cnt–)来判断 当前对角线上的1所在的行和列除了他本身 剩下的是否都是‘0’ 一步步来缩小范围 当当前点不满足条件时 我直接flag 跳出
循环此操作 每次都用max()函数来 挑选最大值 最后就是该矩阵中最大子矩阵的行数
上AC代码!:

#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
char p[1005][1005];
int m,n,cnt;
        //能从1这个点扩大几层 

int sou(int x , int y){
   
	//cout<<"此时在sou函数中"<<endl; 
	//在不越界的情况 
	if(x+
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值