鱼C论坛

 找回密码
 立即注册
查看: 1889|回复: 4

救救孩子!在矩阵中寻找最长的长方形

[复制链接]
发表于 2021-11-7 05:35:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 欺Ran 于 2021-11-9 02:16 编辑

在一个只有10的矩阵中找到最长的用‘1’组成的长方形
还必须用到这个方程

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-7 11:10:14 | 显示全部楼层
so, where is the Matrix?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-7 11:26:29 | 显示全部楼层
suchocolate 发表于 2021-11-7 11:10
so, where is the Matrix?

Matrix是随机的,任何二维二进制的都可以
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-7 12:49:12 | 显示全部楼层
你的问题表达不太清,我的代码如下,希望对你有帮助:
C 语言:
#include <stdio.h>
#include <string.h>

int main()
{
    // 自行输入所有值,row 表示行,col 表示列
    // int row, col;
    // scanf("%d %d", &row, &col);
    // int arr[row][col];
    // memset(arr, 0, row*col*sizeof(int));
    // for(int i = 0; i < row; i++){
    //     for(int j = 0; j < col; j++){
    //         scanf("%d", &arr[i][j]);
    //     }
    // }
    
    // 范例:假设已经输入全部值,row 为 5,col 为 5
    int row = 5, col = 5;
    int arr[5][5] = {
        {0, 1, 1, 0, 1},
        {1, 0, 1, 1, 0},
        {0, 1, 0, 1, 0},
        {0, 0, 0, 1, 1},
        {1, 1, 0, 0, 0}};
    
    // max 表示最长长方型长度
    int max = 0, res;
    
    // 找出最长长方型长度
    for(int i = 0; i < row; i++){
        res = 0;
        for(int j = 0; j < col; j++){
            if(arr[i][j]){
                res++;
                max = res > max ? res : max;
            }
            else res = 0;
        }
    }
    
    // 行列对调:行变成列,列变成行 row-column exchange
    int temp[row][col];
    for(int i = 0; i < row; i++){
        for(int j = 0; j < col; j++){
            temp[j][i] = arr[i][j];
        }
    }
    for(int i = 0; i < row; i++){
        for(int j = 0; j < col; j++){
            arr[i][j] = temp[i][j];
        }
    }
    
    // 找出最长长方型长度
    for(int i = 0; i < row; i++){
        res = 0;
        for(int j = 0; j < col; j++){
            if(arr[i][j]){
                res++;
                max = res > max ? res : max;
            }
            else res = 0;
        }
    }
    
    printf("%d", max);
    return 0;
}
Python 语言:
# 自行输入所有值,row 表示行,col 表示列
# row, col = map(int, input().split())
# arr = []; temp = []
# for i in range(row):
#     temp = list(map(int, input().split()))
#     arr.append(temp)

# 范例:假设已经输入全部值
arr = [
    [0, 1, 1, 0, 1],
    [1, 0, 1, 1, 0],
    [0, 1, 0, 1, 0],
    [0, 0, 0, 1, 1],
    [1, 1, 0, 0, 0]
]

max = 0 # max 表示最长长方型长度

for row in arr: # 找出最长长方型长度
    res = 0
    for i in row:
        if i:
            res += 1
            max = res if res > max else max
        else:
            res = 0

arr = [list(col) for col in zip(*arr)] # 行列对调:行变成列,列变成行 row-column exchange

for row in arr: # 找出最长长方型长度
    res = 0
    for i in row:
        if i:
            res += 1
            max = res if res > max else max
        else:
            res = 0

print(max)
输出结果:
3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-7 13:38:26 | 显示全部楼层
傻眼貓咪 发表于 2021-11-7 12:49
你的问题表达不太清,我的代码如下,希望对你有帮助:
C 语言:Python 语言:输出结果:

您好,您写的这个代码很好。但是我想用我已经写出来的那个当一个help方程。我提供的那个是给行和列然后算出从那个坐标开始的最大的长方形。现在我想在运用这个的基础上,再写一个代码为可以算出整个矩阵中最大的长方形。我应该怎么写呢,希望还可以帮一下我,万分感谢,用python就好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 22:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表