二维数组最大子数组

由一位数组到求二维数组中的最大子数组  ;开始是想的是把每一行,每一列,中最大的求出来;只有有一个倒置矩阵就能和实现,后来老师一说这个子数可以是几行几列;

瞬间就感到不是那么容易,开始我和我的好基友就是想依次遍历;for循环;华飞说这样麻烦,会有重复的部分;但是并不影响最大的结果;对于老师的提示:最大的子数组有可能出现在该数组中最大的那个数周围;或正整数最多的行或列;我们也讨论了,但是感觉还是不是很对。。。。纠结最后还是依次遍历吧.....

 

程序如下:

#include<iostream>
using namespace std;
#define N 100
int main()
{
int row,column;
int sum,max;
int i,k,j,t,m,x,n,s;
int a[N][N],b[N][N],c[N][N],d[N][N];
int length,line;
cout<<"请输入数组的行数:"<<endl;
cin>>row;
cout<<"请输入数组的列数:"<<endl;
cin>>column;
cout<<"请输入数组元素:"<<endl;
for(i=0;i<row;i++)
   {
      for(j=0;j<column;j++)
          { 
          cin>>a[i][j];
          } 
    }
for(i=0;i<row;i++)
   {
      for(j=0;j<column;j++)
         {
            max=a[i][j];
            for(m=1;m<=column-j;m++)
            { 
            sum=0;
            length=1;
            line=i;
            for(x=0;x<row;x++)
            { 
            for(k=j;k<j+m;k++)
                {
                sum=sum+a[x][k];
                }
                if(max<=sum)
                    {
                    max=sum;
                    length=m;
                    line=x; 
                    b[i][j]=max;
                    c[i][j]=length;
                    d[i][j]=line; 
                    }
            } 
            }
        }
    }
max=b[0][0];
t=0;
n=0;
for(i=0;i<row;i++)
    {
    for(j=0;j<column;j++)
    { 
    if(max<b[i][j]) 
        {
        max=b[i][j];
        t=i;
        n=j;
        }
    }
    }
cout<<"最大子数组和是:";
cout<<max<<endl;
cout<<"子序列为"<<endl;
for(i=t;i<=d[t][n];i++)
    {
    for(j=n;j<n+c[t][n];j++)
        {
        cout<<a[i][j]<<'	';
        }
        cout<<endl;
        }
return 0;
}

原文地址:https://www.cnblogs.com/songjingchao/p/3612248.html