鱼C论坛

 找回密码
 立即注册
查看: 1669|回复: 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 语言:
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     // 自行输入所有值,row 表示行,col 表示列
  6.     // int row, col;
  7.     // scanf("%d %d", &row, &col);
  8.     // int arr[row][col];
  9.     // memset(arr, 0, row*col*sizeof(int));
  10.     // for(int i = 0; i < row; i++){
  11.     //     for(int j = 0; j < col; j++){
  12.     //         scanf("%d", &arr[i][j]);
  13.     //     }
  14.     // }
  15.    
  16.     // 范例:假设已经输入全部值,row 为 5,col 为 5
  17.     int row = 5, col = 5;
  18.     int arr[5][5] = {
  19.         {0, 1, 1, 0, 1},
  20.         {1, 0, 1, 1, 0},
  21.         {0, 1, 0, 1, 0},
  22.         {0, 0, 0, 1, 1},
  23.         {1, 1, 0, 0, 0}};
  24.    
  25.     // max 表示最长长方型长度
  26.     int max = 0, res;
  27.    
  28.     // 找出最长长方型长度
  29.     for(int i = 0; i < row; i++){
  30.         res = 0;
  31.         for(int j = 0; j < col; j++){
  32.             if(arr[i][j]){
  33.                 res++;
  34.                 max = res > max ? res : max;
  35.             }
  36.             else res = 0;
  37.         }
  38.     }
  39.    
  40.     // 行列对调:行变成列,列变成行 row-column exchange
  41.     int temp[row][col];
  42.     for(int i = 0; i < row; i++){
  43.         for(int j = 0; j < col; j++){
  44.             temp[j][i] = arr[i][j];
  45.         }
  46.     }
  47.     for(int i = 0; i < row; i++){
  48.         for(int j = 0; j < col; j++){
  49.             arr[i][j] = temp[i][j];
  50.         }
  51.     }
  52.    
  53.     // 找出最长长方型长度
  54.     for(int i = 0; i < row; i++){
  55.         res = 0;
  56.         for(int j = 0; j < col; j++){
  57.             if(arr[i][j]){
  58.                 res++;
  59.                 max = res > max ? res : max;
  60.             }
  61.             else res = 0;
  62.         }
  63.     }
  64.    
  65.     printf("%d", max);
  66.     return 0;
  67. }
复制代码
Python 语言:
  1. # 自行输入所有值,row 表示行,col 表示列
  2. # row, col = map(int, input().split())
  3. # arr = []; temp = []
  4. # for i in range(row):
  5. #     temp = list(map(int, input().split()))
  6. #     arr.append(temp)

  7. # 范例:假设已经输入全部值
  8. arr = [
  9.     [0, 1, 1, 0, 1],
  10.     [1, 0, 1, 1, 0],
  11.     [0, 1, 0, 1, 0],
  12.     [0, 0, 0, 1, 1],
  13.     [1, 1, 0, 0, 0]
  14. ]

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

  16. for row in arr: # 找出最长长方型长度
  17.     res = 0
  18.     for i in row:
  19.         if i:
  20.             res += 1
  21.             max = res if res > max else max
  22.         else:
  23.             res = 0

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

  25. for row in arr: # 找出最长长方型长度
  26.     res = 0
  27.     for i in row:
  28.         if i:
  29.             res += 1
  30.             max = res if res > max else max
  31.         else:
  32.             res = 0

  33. print(max)
复制代码
输出结果:
  1. 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, 2024-5-13 09:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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