二维整数数组最大子数组的和

Posted yh99

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维整数数组最大子数组的和相关的知识,希望对你有一定的参考价值。

作业思路:

用宏定义表示长和宽控制二维数组的大小。采取逐行轮换相加的方法依次求若干行的最大子数组的和,利用一个一维数组来储存逐行轮换相加得到的一维数组,
再在该数组里求一维数组的最大子数组的和,这样就把二维数组转换成了一维数组,问题就迎刃而解了。




#include<iostream>  
using namespace std;
#define M 4
#define N 4  
int maxSubArray(int *a, int len)   //最大子序列和  
{
    int i, sum = a[0], b = 0;
    for (i = 0; i<len; ++i)
    {
        if (b>0)
            b += a[i];
        else
            b = a[i];
        if (b>sum)
            sum = b;
    }
    return sum;
}
int maxSubMatrix(int n, int m, int array[M][N])
{
   int i, j, h, max, sum = -100000;
   int b[100];
   for (i = 0; i < n; i++)
   {
       memset(b, 0, sizeof(b));       //初始化b[]  
       for (j = i; j < n; j++)          //把第i行到第j行相加,对每一次相加求出最大值  
       {
           for (h = 0; h<m; h++)
           {
               b[h] += array[j][h];   //求最大子序列和  
           }
        max = maxSubArray(b, h);
        if (max>sum)
            sum = max;
       }
   }
   return sum;
}
int main()
{
int arr[M][N] = {{13, 5,-23,9}, {-17,21,30,12},{-111,0,21,13},{50,12,-10,18}};
cout << "最大子数组为:" << endl;
cout << maxSubMatrix(M, N, arr) << endl;
system("pause");
return 0;
}

技术分享图片

 总结:

   目前程序大体上能运行出结果了,但是整个程序还有很大的不足,没有随机数的应用以及数组的输入必须在程序中进行等等一系列的问题,我们在查阅和讨论中认识到自己的不足之处。

结对(博客园id:绝望的暴风雨)

技术分享图片

 

以上是关于二维整数数组最大子数组的和的主要内容,如果未能解决你的问题,请参考以下文章

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组中最大联通子数组的和

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组最大子数组的和