求0,1矩阵的最大连续全1块(可以非规则)

求0,1矩阵的最大连续全1块(con)

给一个n/times m的0,1矩阵,求它的面积最大的全1子块。

要求O(n^2)时间。

------------------------------------------------------------------------

对矩阵做三次扫描, 扫描的次序都是从左到右,从上到下.第一遍将所有为1的元素,依次标一个值,这个值从1开始 例如:
0 0 0 0 0  // 0 0 0 0 0标注成这样
0 1 1 0 0  // 0 1 2 0 0
0 1 0 0 0  // 0 3 0 0 0
0 0 0 1 0  // 0 0 0 4 0
0 0 0 1 0  // 0 0 0 5 0
第二遍 如果 遇到不为0 的元素, 考虑这个元素以及它周围四个元素中,不为0的元素标,求他们的最小值,并将这些元素通标注为这个最小值 像上面,遇到了1 那么将 2和3 标注成 1 。就变成下面这样
0 0 0 0 0
0 1 1 0 0
0 1 0 0 0
0 0 0 4 0
0 0 0 4 0
左后一遍 数一下各种数字的个数,最多的,就是最大全1子块的面积

(注,这样做,结果是连续的全1区域,很可能是不规则的)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果你想让一个n×n的矩阵尽可能美观,你可以尝试将数字按照顺时针顺序填入矩阵中。例如,对于n=3的矩阵,你可以按照如下方式填充数字: 8 1 6 3 5 7 4 9 2 这样可以使得矩阵的美感尽可能的大,因为对于每对侧相邻元素,它们的绝对值之差都是1。 这种填数方法也称为顺时针螺旋填数法。 ### 回答2: 对于给定的整数n,要找到一个大小为n×n的矩阵,其中每个整数来自1到n^2,且美感是所有此类矩阵中可能最大的。 首先,我们可以将1到n^2的数字按照从小到大的顺序填入矩阵的对角线上,使得相邻的对角线上的数字尽可能接近。例如,对于3×3的矩阵,填入的数字为: 1 0 0 0 2 0 0 0 3 然后,我们可以沿着对角线向两侧扩展填充数字,按照上述定义的美感计算不同数字的数量。具体地,从对角线上方的数字开始,依次向上和向左填充,直到矩阵的边界。填充的数字按照以下规则选择: 1. 如果当前位置的数字已经填充,则将其上方或左侧未填充的数字填入; 2. 如果当前位置的数字未填充,则将其下方或右侧未填充的数字填入。 填充完成后,我们得到的矩阵即为满足要的最大美感矩阵。例如,对于3×3的矩阵,填充的数字为: 1 4 0 3 2 5 0 6 3 这样,我们得到的矩阵中每对侧相邻元素的绝对值差异为: 3 4 5 1 3 1 6 3 3 其中,不同数字的数量为6,这是满足要的最大美感矩阵。 需要注意的是,上述方法得到的美感矩阵可能不是唯一的,因为在填充过程中有多种选择。但是,无论选择哪种方法,最终得到的美感矩阵都满足题目要。 ### 回答3: 对于给定的整数n,我们需要构造一个大小为n×n的方阵,使得每个整数都来自1到n^2,并且美感是所有可能矩阵中最大的。 首先,我们可以发现,美感的最大值可以在以下情况下实现:每一行和每一列的数字都是连续的,从1到n。例如,在3×3的方阵中,可以是: 1 2 3 2 3 1 3 1 2 对于任意整数n,我们可以使用以下方法构造一个满足条件的方阵: 1. 创建一个大小为n×n的空方阵。 2. 从1到n^2开始,按顺序填充方阵的主对角线(从左上角到右下角)。 3. 接下来,填充剩余的空位。我们可以按以下规则填充: a. 如果当前位置为空,即为0,找到与当前位置相邻的已填充的数字x,并填充x+1。 b. 如果填充的数字超过n,则回到1。 例如,对于n=3,首先,我们按顺序在主对角线上填充: 1 0 0 0 2 0 0 0 3 然后,我们填充剩余的空位。对于第一行的第二个位置(0),它与已填充的数字1相邻,所以我们填充1+1=2: 1 2 0 0 2 0 0 0 3 对于第一行的第三个位置(0),它与已填充的数字2相邻,所以我们填充2+1=3: 1 2 3 0 2 0 0 0 3 以此类推,我们最终可以得到一个满足条件的方阵。这样构造的方阵中每个整数来自1到n^2,并且美感是所有可能矩阵中最大的。 总结起来,我们可以通过先填充主对角线,再按规则填充剩余的空位来构造一个满足条件的方阵,使得美感是所有可能矩阵中最大的。这个构造方法可以适用于任意大小的方阵。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值