找出矩阵中的最大矩形
2015-09-20 19:35
274 查看
//找出矩阵中由 1 组成的最大的矩形, #include "stdafx.h" #include "iostream" using namespace std; int find_1(int **p, int nRow, int nCol); int find_Rect(int **p, int x, int y, int nRow, int nCol); int main() { int nRow = 0, nCol = 0; cin >> nRow >> nCol; int **p = new int*[nRow](); for (int n0 = 0; n0 < nRow; ++n0) p[n0] = new int[nCol](); for (int n = 0; n < nRow; ++n) for (int m = 0; m < nCol; ++m) cin >> p [m]; cout << find_1(p, nRow, nCol); return 0; } int find_1(int **p,int nRow,int nCol) { int max = 0; for (int n = 0; n < nRow; ++n) for (int m = 0; m < nCol; ++m) if (p [m] != 0) { int tmp = 0; tmp = find_Rect(p, n, m, nRow, nCol); if (tmp) { max = tmp > max ? tmp : max; } else continue; } return max; } int find_Rect(int **p, int x, int y, int nRow, int nCol) { int length = 0; for (int m0 = y; m0 < nCol; ++m0) { if (p[x][m0] == 1) length++; else break; } for (int m = x; m < ((x + length)>nRow?nRow:(x+length)); ++m) for (int n = y; n < ((y + length)>nCol?nCol:(y+length)); ++n) if (p[m] != 1) { int tmp = m > n ? m : n; length = length > tmp ? tmp : length; } if (length>(nRow - x))length = (nRow - x); return length; }
方法可能比较笨拙,遍历过程可以优化,缩小遍历范围
相关文章推荐
- 我的架构经验小结(四)—— 实战中演化的三层架构
- git
- 502 Bad Gateway 自动重启脚本
- 如何成为一名优秀的软件测试工程师
- cout 小数点后位数(转)
- 迎接新未来
- # 弱鸡 Linux Mint 17.2安装体验
- 等价类方法
- OC字符串实现路径合并
- 使用Git进行代码管理心得------------个人练习
- 负载均衡
- netbeans做简易的计算器
- [杂记]一些感悟,随时更新
- OC字符串查找
- bzoj1664:参加节日庆祝
- Java关键字this、super使用总结
- 技术人生:故事之二十九 我们忙什么
- Android自定义ViewGroup
- OC字符串的替换与分割
- 采集网页数据生成到静态模板newslist.html文件中(正则表达式)