1. 程式人生 > >二維整數數組最大子數組的和

二維整數數組最大子數組的和

二維數組 子數組 use 維數 進行 沒有 pre std turn

作業思路:

用宏定義表示長和寬控制二維數組的大小。采取逐行輪換相加的方法依次求若幹行的最大子數組的和,利用一個一維數組來儲存逐行輪換相加得到的一維數組,
再在該數組裏求一維數組的最大子數組的和,這樣就把二維數組轉換成了一維數組,問題就迎刃而解了。




#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:絕望的暴風雨)

技術分享圖片

二維整數數組最大子數組的和