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

     

复制代码
#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("\n1,2,3\n-4,-5,-6\n9,4,-1\n的MAX:");
    MAX(a,3,3);
    int b[]={1,2,3,
                4,5,6,
                9,4,1};
    printf("\n1,2,3\n4,5,6\n9,4,1\n的MAX:");
    MAX(b,3,3);
    int c[]={-1,-2,-3,
                            -4,-5,-6,
                -9,-4,-1};
    printf("\n-1,-2,-3\n-4,-5,-6\n-9,-4,-1\n的MAX:");
    MAX(c,3,3);
    int d[]={-1,2,-3,
                            -4,5,-6 };
    printf("\n-1,2,-3\n-4,5,-6\n的MAX:");
    MAX(d,2,3);
}
复制代码

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

posted @ 2014-03-19 20:18  黄为  阅读(164)  评论(0编辑  收藏  举报