您的位置:首页 > 其它

返回一个首尾相连的二维数组的最大子数组的和

2015-04-22 13:22 253 查看
1.编程思路:根据以前的首尾相连的一维数组的最大子数组求出每一行的最大子矩阵,然后再两行相加,求出最大子矩阵,一直到所有的行相加,求出最大子矩阵。比较其中最大的子矩阵值,最后输出最大子矩阵和的值;

2.代码:

#include<iostream>
#include <ctime>
#include <cstdlib>
#define MAX 10000
using namespace std;
int Max(int b[])
{
int m[MAX],n=0,p=0;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
n=n+b[i+j];
m[p]=n;
p++;
}
n=0;
}
int max=m[0];
for(int i=0;i<p;i++)
{
if(m[i]>max)
max=m[i];
}
return max;
}
int main()
{
int k[MAX],a[4][8],h[8];
int i;
int j;

cout<<"二维矩阵为:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
a[i][j]=rand()%100-50;
a[i][j+4]=a[i][j];
cout<<a[i][j]<<" ";
}
cout<<endl;
}
for(i=0;i<4;i++)
{
k[i]=Max(a[i]);
}
int  q=4;
for(i=0;i<3;i++)
{
int t=0;
for(j=0;j<8;j++)
{
h[t]=a[i][j]+a[i+1][j];
t++;
}
k[q]=Max(h);
q++;
}
for(i=0;i<2;i++)
{
int t=0;
for(j=0;j<8;j++)
{
h[t]=a[i][j]+a[i+1][j]+a[i+2][j];
t++;
}
k[q]=Max(h);
q++;
}
int t=0;
i=0;
for(j=0;j<8;j++)
{
h[t]=a[i][j]+a[i+1][j]+a[i+2][j]+a[i+3][j];
t++;
}
k[q]=Max(h);
q++;
cout<<endl;
int max=k[0];
for(i=0;i<q;i++)
{
if(k[i]>max)
max=k[i];
}
cout<<"最大子矩阵的值为:";
cout<<max<<endl;
return 0;
}


3.结果截图:



4.总结:思路很重要,这个是根据以前的思路推出来的,思路出来了,程序就更好写了

陈杰:思路以及程序编写

孟祥娟:测试以及博客发表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: