zoukankan      html  css  js  c++  java
  • 二维数组最大子数组算法

    小组成员: 贾川  李驭龙

    算法思想:

         先将这个二维数组的每一行每一列的最大子数组求出来存到一个一维数组内,

    然后再循环求出每个矩形块元素之和再在依次存入到这个一维数组内。最后在这

    个一位数组中找出最大子数组。

    源程序代码如下:

    #include "stdafx.h"
    #include "stdio.h"
    int m;//记录一位数组的个数
    int max;//记录最大子数组和
    
    void Max0(int a[][3])//此函数作用为把二维数组每个子数组块和找出来存入到一个一维数组里,再通过比较找到一个最大的值max
    {
        int i,j,k,m,sum,b[100];
        m=0;
         for(i=0;i<3;i++)
        {   
            
            for(j=0;j<2;j++)
            {   
                sum=a[i][j];
                for(k=j+1;k<3;k++)
                {
                   sum=sum+a[i][k];
                   b[m++]=sum;
                }
            }
        }
        for(i=0;i<3;i++)
        {   
            
            for(j=0;j<2;j++)
            {   
                sum=a[j][i];
                for(k=j+1;k<3;k++)
                {
                   sum=sum+a[k][i];
                   b[m++]=sum;
                }
            }
        }
        for(i=0;i<2;i++)
        {   
            
            for(j=0;j<2;j++)
            {   
                sum=a[i][j]+a[i+1][j];
                for(k=j+1;k<3;k++)
                {
                   sum=sum+a[i][k]+a[i+1][k];
                   b[m++]=sum;
                }
            }
        }
        for(i=0;i<2;i++)
        {   
            
            for(j=0;j<2;j++)
            {   
                sum=a[j][i]+a[j][i+1];
                for(k=j+1;k<3;k++)
                {
                   sum=sum+a[k][i]+a[k][i+1];
                   b[m++]=sum;
                }
            }
        }
        for(i=0;i<1;i++)
        {   
            
            for(j=0;j<2;j++)
            {   
                sum=a[i][j]+a[i+1][j]+a[i+2][j];
                for(k=j+1;k<3;k++)
                {
                   sum=sum+a[i][k]+a[i+1][k]+a[i+2][k];
                   b[m++]=sum;
                }
            }
        }
        for(i=0;i<1;i++)
        {   
            
            for(j=0;j<2;j++)
            {   
                sum=a[j][i]+a[j][i+1]+a[j][i+2];
                for(k=j+1;k<3;k++)
                {
                   sum=sum+a[i][k]+a[k][i+1]+a[k][i+2];
                   b[m++]=sum;
                }
            }
        }
            for(i=0;i<3;i++)
            {   
            
                 for(j=0;j<3;j++)
                {  
                   b[m++]=a[i][j];
                }
            }
        max=b[0];
        for(i=0;i<m;i++)
        {
            if(max<=b[i])
            {
                max=b[i];
            }
        }
    
        printf("最大子数组和为:%d
    ",max);
    }
        
    int main(int argc, char* argv[])
    {
        int num[3][3];
        int i,j;
        printf("请输入九个数:
    ");
        for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                scanf("%d",&num[i][j]);
            }
        }
        printf("生成的数组矩阵为:
    ");
            for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            {
                printf("%d     ",num[i][j]);
                if(j==2)
                        {
                            printf("
    
    ");
                        }
            }
            
        }
        Max0(num);
        return 0;
    }


    运行结果如下







    草稿设计图如下:(可能有点乱)



    实验心得:
    这次试验主要是根据上次的一维数组求最大子数组算法的改编,也是逐个寻找,
    只是多了几个for循环内部矩阵的查找。缺点比较明显,占用资源量比较大。

    
    
  • 相关阅读:
    caffe常用层: batchNorm层和scale层
    简述configure、pkg-config、pkg_config_path三者的关系
    python删除list中元素的三种方法
    Leetcode 872. Leaf-Similar Trees
    Leetcode 508. Most Frequent Subtree Sum
    Leetcode 572. Subtree of Another Tree
    Leetcode 894. All Possible Full Binary Trees
    Leetcode 814. Binary Tree Pruning
    Leetcode 557. Reverse Words in a String III
    python 多维list声明时的小问题
  • 原文地址:https://www.cnblogs.com/ID-q-han/p/3608804.html
Copyright © 2011-2022 走看看