求一个矩阵中子矩阵的和的最大值

  题目:求一个指定矩阵中的子矩阵的和的最大值

 

 

  负责人:赵顺杰 马帅强

 

  在王老师布置该课题的课上时间,赵顺杰和我在纸上讨论了方法,在课下把这个方法补充完整:

  我们先定义了一个3*3的矩阵,首先是子矩阵中元素数为1的矩阵的和,也就是元素自己,然后是元素数分别为2,3,4,6,9的子矩阵。定义一个变量max,将每一个子矩阵的和与max比较,较大的数赋值给max,最后输出max。

 

#include<iostream.h>
void main()
{
    
            int a[3][3]={{1,2,3},{4,5,6},{7,8,9}};
            int i,j,d=0;
            int max=0;
            for(i=0;i<=2;i++)//2个
            {
                    for(j=0;j<=1;j++)

                        max=(max>a[i][j]+a[i][j+1])?max:a[i][j]+a[i][j+1];

                       
            }
            
                for(j=0;j<=2;j++)
                {
                    for(i=0;i<=1;i++)
                        max=(max>a[i][j]+a[i+1][j])?max:a[i][j]+a[i+1][j];
                }
             
                for(i=0;i<=2;i++)//1个
                {
                    for(j=0;j<=2;j++)
                        max=(max>a[i][j])?max:a[i][j];
                }
 

                for(i=0;i<=2;i++)//3个
                {
                        j=0;
                        max=(max>a[i][j]+a[i][j+1]+a[i][j+2])?max:a[i][j]+a[i][j+1]+a[i][j+2];
                }
                for(j=0;j<=2;j++)
                {
                        i=0;
                        max=(max>a[i][j]+a[i+1][j]+a[i+2][j])?max:a[i][j]+a[i+1][j]+a[i+2][j];
                }
              for(i=0;i<=2;i++)//9个
              {
                 
                for(j=0;j<=2;j++)
                {
                   
                    d=d+a[i][j];
                }
                
                
              }
             max=(max>d)?max:d;
            for(i=0;i<=1;i++)//6个
            {
                j=0;
                   max=(max>a[i][j]+a[i][j+1]+a[i][j+2]+a[i+1][j]+a[i+1][j+1]+a[i+1][j+2])?max:a[i][j]+a[i][j+1]+a[i][j+2]+a[i+1][j]+a[i+1][j+1]+a[i+1][j+2];
            }
            for(j=0;j<=1;j++)
            {
                i=0;
                   max=(max>a[j][i]+a[j][i+1]+a[j][i+2]+a[j+1][i]+a[j+1][i+1]+a[j+1][i+2])?max:a[j][i]+a[j][i+1]+a[j][i+2]+a[j+1][i]+a[j+1][i+1]+a[j+1][i+2];        
            }
            for(i=0;i<=1;i++)//4个
            {       
                for(j=0;j<=1;j++)
                {
                    int c=0;
                    c=c+a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1];
                    max=(max>c)?max:c;
                           
                }
            }
             
          cout<<"子数组的和的最大值是: "<<max<<endl;

}

 

 

  

原文地址:https://www.cnblogs.com/mashuaiqiang/p/3627356.html