首页 > 其他 > 详细

二维数组最大子数组

时间:2014-03-20 03:41:12      阅读:407      评论:0      收藏:0      [点我收藏+]

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

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

bubuko.com,布布扣
 

程序如下:

#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]<<\t;
        }
        cout<<endl;
        }
return 0;
}
bubuko.com,布布扣
bubuko.com,布布扣

二维数组最大子数组,布布扣,bubuko.com

二维数组最大子数组

原文:http://www.cnblogs.com/songjingchao/p/3612248.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!