1. 程式人生 > >返回一個二維整形陣列的子陣列的最大和

返回一個二維整形陣列的子陣列的最大和

實驗要求:1輸入一個二維整形陣列,陣列中有正數也有負數。2二維陣列中連續的一個子矩陣組成一個子陣列,每個 子陣列都有一個和。求所有子陣列的和的最大值。實驗思路:          1.首先確定子陣列的最大上界,從第一行依次向下,規定最大子陣列的範圍。   2.確定子陣列的行列型別。   3.用一維子陣列的方法求出子陣列的最大和,求出最大值。   4.最後將子陣列的最大上界下降1,再迴圈。實驗程式碼
 #include<iostream>
using namespace std;
void main ()
{
    int i,j,m,n,l=0,A[100][100];
    cout<<"輸入矩陣行列數";
    cin>>m>>n;
    if(m>100||n>100)
    {
        cout<<"請重新輸入:";
        cin>>m>>n;
    }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            cin>>A[i][j];
        }
 
    }
    int sum[100]={0},max=0,result=A[0][0];
 
    for(i=0;i<m;i++)
    {
        while(l+i<m)
        {
            for(j=0;j<n;j++)
            {
                sum[j]=sum[j]+A[l+i][j];
 
            }
            max=0;
            for(j=0;j<n;j++)
            {
                if(max+sum[j]>sum[j])
                {
                    max=max+sum[j];
                }
                else
                {
                    max=sum[j];
                }
                if(max>result)
                {
                    result=max;
                }
            }
            l++;
        }
        l=0;
        for(j=0;j<n;j++)
        {
            sum[j]=0;
        }
 
    }
 
    cout<<result;
}
執行截圖
 實驗總結  本次試驗是上次求一維整數最大子陣列的和的昇華,將整數改成二維陣列,基本思路與一維陣列相似,加入迴圈將最大子陣列上界下降迴圈求出。實驗夥伴   (李鵬,谷豪磊)