首页 > 其他 > 详细

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

时间:2014-03-19 18:03:20      阅读:424      评论:0      收藏:0      [点我收藏+]

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

bubuko.com,布布扣
#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);
}
bubuko.com,布布扣

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

bubuko.com,布布扣

【C】二维数组求最大子数组(基于一维数组的拓展),布布扣,bubuko.com

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

原文:http://www.cnblogs.com/feelwell/p/3611716.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!