zoukankan      html  css  js  c++  java
  • 求一个二维数组的最大子矩阵(王伟光,曹锦锋)

    算法描述:本题可以使用穷举法,但是那样不容易实现以及效率不高,我们的想法是,将二维数组变成一维数组,再将此“一维数组”按照上次的做法既可求出最大子数组,

    怎么样将二维变成一维呢:例如我们做的是四行四列的数组,将每一行用一个sum来表示,则有sum[1],sum[2],sum[3],sum[4],sum[1]动态的代表此行的和,例如前两个数的和,再往后变成前三个数的和,每当求出一行的和时,同时也求出了以下三行的和,然后将sum数组看成一维数组进行比较求出最大值,然后动态的向后推进,直到遍历完,即可求出最大值

    程序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include<stdio.h>
    int main()
    {
        int m,n,i,j,i1,z;
        int sum1,sum[4];
        int a[4][4];
        int max=0;
        printf("请输入数据 ");
        for(i=0;i<4;i++)
            for(j=0;j<4;j++)
              scanf("%d",&a[i][j]);
            for(m=0;m<4;m++)
            {
                for(i1=0;i1<4;i1++)
                {sum[i1]=0;}//初始化
                for(j=m;j<4;j++)
                {
                    for(i=0;i<4;i++)
                    {
                        sum[i]+=a[i][j];
                    }//求行的值变成一维数组
                    for(n=0;n<4;n++)
                    {
                        sum1=0;
                        for(z=n;z<4;z++)
                        {
                            sum1+=sum[z];
                            if(sum1>max)
                                max=sum1;
                        }
                    }
                }
            }
            printf("最大值为%d ",max);
      
        return 0;
    }

      运行结果:

        

     课下讨论截图:

  • 相关阅读:
    优化cocos2d/x程序的内存使用和程序大小
    cocos2d-x移植:xcode到eclipse
    程序员在编程工作中痛苦的压抑着自己某些强烈的情绪
    C++语言的一些问题
    基数排序-图非常清晰明了
    【Cocos2d-X(1.x 2.x) 修复篇】iOS6 中 libcurl.a 无法通过armv7s编译以及iOS6中无法正常游戏横屏的解决方法
    《C++ Primer》笔记-inline内联函数
    走出你的舒适区
    UDP广播与多播
    测试问题反馈需要包含内容总结
  • 原文地址:https://www.cnblogs.com/caojinfeng/p/3611523.html
Copyright © 2011-2022 走看看