首页 > 其他 > 详细

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

时间:2014-03-19 15:18:05      阅读:570      评论:0      收藏:0      [点我收藏+]

                                                                                      二维数组求最大值问题

                                                                                                            ——杨波 崔海营

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

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

  

bubuko.com,布布扣
#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;
}
bubuko.com,布布扣

二维数组的子数组求最大值问题,布布扣,bubuko.com

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

原文:http://www.cnblogs.com/chysly/p/3611294.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!