您的位置:首页 > 其它

二维数组的子数组求最大值问题

2014-03-19 14:14 120 查看
二维数组求最大值问题

——杨波 崔海营

经过几天对于整个算法的详细研究,我们发现之前提出的四种算法的猜想很大程度上是可以用代码来实现的,但是越是详细分析发现考虑的问题越深入,给我们也造成了相应的困难,所以决定当前用穷举法来完成这个程序的设计。不过在今后的学习中还会进一步的探讨之前所提出的几种猜想。其实编程的过程不仅仅是当前的,不也是长久的吗?随着知识的逐渐深入,编程水平的相应提升,相信现在的大困难,终将成为提升水平的垫脚石。

下面是我们用穷举法编的程序:

#include <iostream>
using namespace std;
typedef struct sq                                //定义一个矩阵的结构体
{
int m1;
int n1;
int m2;
int n2;
}squre;
int Sum1(int *array,squre c)                     //求得子矩阵中元素的和
{
int i,j,sum=0;
for(i=c.m1;i<=c.m2;i++)
for(j=c.n1;j<=c.n2;j++)
sum+=(*(array+i*100+j));

return sum;
}
int GetMax(int * array,int m,int n)           //求取最大子矩阵的和
{
int max,Sum;
squre c
;
for(c.m1=0;c.m1<m;c.m1++)
for(c.n1=0;c.n1<n;c.n1++)
for(c.m2=c.m1;c.m2<m;c.m2++)
for(c.n2=c.n1;c.n2<n;c.n2++)
{
Sum=Sum1(array,c);
if(max<Sum)
{
max=Sum;
}
}
return max;
}
int main()
{
int m,n,array[100][100]={0};
cout<<"请输入二维数组的行数:"<<endl;
cin>>m;
cout<<"请输入二维数组的列数:"<<endl;
cin>>n;
cout<<"请输入二维数组的"<<m*n<<"个元素值:"<<endl;
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
cin>>array[i][j];
cout<<"该二维数组中最大子数组的和为:"<<endl;
cout<<GetMax(*array,m,n)<<endl;
return 0;
}


附录:时间记录日志(2014年)

工作人时间工作内容
杨波,崔海营3.17 12:30-13:50讨论方法设计
杨波3.17 14:40-16:20四种设计思想及发布
崔海营,杨波3.19 13:15-14:24讨论编码设计
崔海营3.19 14:30-15:38代码编写
杨波3.19 15:40-16:20代码编写
崔海营3.19 16:30-17:15博文编写
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: