【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("\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型二维数组进行了测试。

转载于:https://www.cnblogs.com/feelwell/p/3611716.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值