二维数组求最大矩阵
2015-04-09 21:21
169 查看
一、项目思路:
假设f(i,j)表示以第i行开始,到第j行结束的矩阵中子矩阵的最大和
为了求f(i,j),我们对这个矩阵(第i行开始,到第j行结束的矩阵)进行处理:
(1)把这个矩阵中的每一列数相加,最后形成一个一维数组,其长度等于原二维数组列的个数。
(2)在该一维数组上,求解最大子数组和。
二、项目代码:
三、测试结果:
四、项目总结:
经过结对开发,更能促使自己完成任务,完成老师安排的作业。项目测试阶段使自己对程序从头学习,需要自己耐心测试。
假设f(i,j)表示以第i行开始,到第j行结束的矩阵中子矩阵的最大和
为了求f(i,j),我们对这个矩阵(第i行开始,到第j行结束的矩阵)进行处理:
(1)把这个矩阵中的每一列数相加,最后形成一个一维数组,其长度等于原二维数组列的个数。
(2)在该一维数组上,求解最大子数组和。
二、项目代码:
#include<iostream> using namespace std; int MAX(int s[],int n) { int i,sum=0,max=s[0]; for(i=0;i<n;i++) { if(sum>0) { sum=sum+s[i]; } else { sum=s[i]; } if(sum>max) { max=sum; } } return max; } int MIN(int s[],int n) { int i,sum=0,min=s[0]; for(i=1;i<n;i++) { if(sum<0) { sum=sum+s[i]; } else { sum=s[i]; } if(sum<min) { min=sum; } } return min; } int SUM(int s[],int n) { int i,sum=0; for(i=0;i<n;i++) { sum=sum+s[i]; } return sum; } void main() { int m,n,i,j,a[100][100]; cout<<"请输入矩阵的行数和列数:"; cin>>m>>n; cout<<"请输入矩阵元素"<<endl; for(i=0;i<m;i++) { for(j=0;j<n;j++) { cin>>a[i][j]; } } int sum,max,s[100],k=0,min,p=a[0][0]; for(i=0;i<m;i++) { for(j=0;j<n;j++) { s[j]=0; } while(k+i<m) { for(j=0;j<n;j++) { s[j]=s[j]+a[k+i][j]; } sum=SUM(s,n); min=MIN(s,n); max=MAX(s,n); if(sum-min>max) { max=sum-min; } if(max>p) { p=max; } k++; } k=0; } if(m==1&&n==1) p=a[0][0]; cout<<"子矩阵最大值为"<<p<<endl; }
三、测试结果:
四、项目总结:
经过结对开发,更能促使自己完成任务,完成老师安排的作业。项目测试阶段使自己对程序从头学习,需要自己耐心测试。
相关文章推荐
- poj1050 二维数组最大子序列矩阵和
- 3月31号周二课堂练习:结对开发----求二维数组组成的矩阵中子矩阵的最大值二
- 二维数组求最大矩阵
- poj1050 动态规划 求二维数组中子矩阵和的最大值
- 求二维数组组成的矩阵中子矩阵的最大值
- 二维数组返回最大子矩阵之和
- 返回一个二维数组最大矩阵的和
- 求二维数组最大子数组和(或矩阵的最大子矩阵和)
- 3月20号周五课堂练习:结对开发----求二维数组组成的矩阵中子矩阵的最大值
- poj1050 二维数组最大子序列矩阵和
- 求一个二维数组的最大子矩阵的和(令矩阵的行首尾相接为环)
- 利用二维数组存储一个3行4列的单位矩阵,并输出最大值和最小值
- 用二维数组名作形参、实参,求3行4列矩阵中的最大值
- 结对编程之返回一个二维数组中所有子矩阵和的最大值
- 用二维数组名作形参、实参,求3行4列矩阵中的最大值(二)
- 二维数组;求一个3×4的矩阵中最大的那个元素的值,及其所在的行号和列号
- 最大子矩阵:二维数组的最大连续子数组和
- 【DP求最大子矩阵面积】hdu 1506
- 九度OJ 题目1191:矩阵最大值
- 吃西瓜 最大子矩阵 三维的。 rqnoj93