求首位相连二维数组最大子矩阵的和
2015-04-20 10:27
453 查看
结对成员:侯涛亮:主要负责程序设计编写代码。
朱少辉:主要负责程序调试和修改。
题目:一个首尾相接的二维数组,其中有有正数,有负数,求它的最大子矩阵。
思路:该题的解决方法是求二维数组最大子矩阵的和与求一维首位相连最大子数组和结合。求解环的最大子数组可分为两种情况。第一种:当数组下标没有越界,。第二种情况是数组越界。
代码:
截图
总结:解决这道题的关键是这求二维数组最大子矩阵的和与求一维首位相连最大子数组和这两道题的整合,要学会用函数的方法来整合程序。先弄懂每个模块再对每个模块进行组合。
朱少辉:主要负责程序调试和修改。
题目:一个首尾相接的二维数组,其中有有正数,有负数,求它的最大子矩阵。
思路:该题的解决方法是求二维数组最大子矩阵的和与求一维首位相连最大子数组和结合。求解环的最大子数组可分为两种情况。第一种:当数组下标没有越界,。第二种情况是数组越界。
代码:
#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<<"请输入矩阵的大小(m*n):"; 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; } cout<<"子矩阵最大值为"<<p<<endl; }
截图
总结:解决这道题的关键是这求二维数组最大子矩阵的和与求一维首位相连最大子数组和这两道题的整合,要学会用函数的方法来整合程序。先弄懂每个模块再对每个模块进行组合。
相关文章推荐
- 求首位相连一维数组最大子数组的和
- 二维数组求最大子矩阵的和
- 求一个二维数组的最大子矩阵的和(令矩阵的行首尾相接为环)
- 二维数组和最大的子矩阵
- 二维数组最大子矩阵的求和
- 150403 二维数组的子矩阵最大和(动态规划)
- 二维数组首尾相连求最大子矩阵
- 环形二维数组求最大子矩阵
- 二维数组环状最大子矩阵
- 环形二维数组求最大子矩阵
- 2.15 求二维数组的子矩阵的最大和
- 求一个二维数组的最大子矩阵
- 二维数组求最大子矩阵的算法 (闫立新 苏海岩)
- 二维数组中求其中和最大的子矩阵(结对开发)
- 求二维数组最大子数组和(或矩阵的最大子矩阵和)
- 二维数组最大子矩阵和
- 结对开发——求环形二维数组最大子矩阵和的问题
- 求一个二维数组的最大子矩阵的和
- 九度OJ; 题目1139:最大子矩阵
- hdu1559 最大子矩阵