zoukankan      html  css  js  c++  java
  • 【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型二维数组进行了测试。

  • 相关阅读:
    ANSI C 与 C99的不同
    字符串中含有空格的注意事项
    巧用printf函数
    求数列的和
    数值统计
    平方和与立方和
    求奇数的乘积
    第几天?
    细节之重
    用%*c滤掉回车,ASCII码排序
  • 原文地址:https://www.cnblogs.com/feelwell/p/3611716.html
Copyright © 2011-2022 走看看