【C】二维数组求最大子数组(基于一维数组的拓展)

  本方法是基于一维数组来思考的,利用一维数组来描绘出二维数组,从而简化对二维数组求最大子数组的难度。即(a[i][j] = a[i*n+j],用一维数组表示二维数组)
     

#include<stdio.h>


void MAX(int *a,int m,int n) 
{ 
    int max=a[0],sum=0; 
    for(int i=0;i<m;i++) 
    { 
        for(int j=0;j<n;j++) 
        {
            for(int i2=i;i2<m;i2++) 
            { 
                for(int j2=j;j2<n;j2++) 
                { 
                    sum = 0; 
                    for(int i3=i; i3<=i2;i3++) 
                        for(int j3=j; j3<=j2;j3++) 
                        { 
                            sum+=a[i3*n+j3];  
                        } 
                    if(max<sum)
                        max=sum;
                } 
            } 
        } 
    } 
    printf("%d",max); 
   
} 
main()
{
    
    int a[]={1,2,3,
                           -4,-5,-6,
                 9,4,-1};
    printf("
1,2,3
-4,-5,-6
9,4,-1
的MAX:");
    MAX(a,3,3);
    int b[]={1,2,3,
                4,5,6,
                9,4,1};
    printf("
1,2,3
4,5,6
9,4,1
的MAX:");
    MAX(b,3,3);
    int c[]={-1,-2,-3,
                            -4,-5,-6,
                -9,-4,-1};
    printf("
-1,-2,-3
-4,-5,-6
-9,-4,-1
的MAX:");
    MAX(c,3,3);
    int d[]={-1,2,-3,
                            -4,5,-6 };
    printf("
-1,2,-3
-4,5,-6
的MAX:");
    MAX(d,2,3);
}

对函数进行测试:
   分别对 正、负、正负、n*n、n*m型二维数组进行了测试。

原文地址:https://www.cnblogs.com/feelwell/p/3611716.html