码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-10-21 16:53:35      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:names   png   image   define   大小   efi   stream   暴风雨   mat   

作业思路:

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




#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:绝望的暴风雨)

技术分享图片

 

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

标签:names   png   image   define   大小   efi   stream   暴风雨   mat   

原文地址:https://www.cnblogs.com/yh99/p/9825454.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!