您的位置:首页 > 其它

【C】二维数组求最大子数组(基于一维数组的拓展)

2014-03-19 16:26 197 查看
  本方法是基于一维数组来思考的,利用一维数组来描绘出二维数组,从而简化对二维数组求最大子数组的难度。即(a[i][j] = a[i*n+j],用一维数组表示二维数组)

#include<stdio.h>

void MAX(int *a,int m,int n)
{
int max=a[0],sum=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
for(int i2=i;i2<m;i2++)
{
for(int j2=j;j2<n;j2++)
{
sum = 0;
for(int i3=i; i3<=i2;i3++)
for(int j3=j; j3<=j2;j3++)
{
sum+=a[i3*n+j3];
}
if(max<sum)
max=sum;
}
}
}
}
printf("%d",max);

}
main()
{

int a[]={1,2,3,
-4,-5,-6,
9,4,-1};
printf("\n1,2,3\n-4,-5,-6\n9,4,-1\n的MAX:");
MAX(a,3,3);
int b[]={1,2,3,
4,5,6,
9,4,1};
printf("\n1,2,3\n4,5,6\n9,4,1\n的MAX:");
MAX(b,3,3);
int c[]={-1,-2,-3,
-4,-5,-6,
-9,-4,-1};
printf("\n-1,-2,-3\n-4,-5,-6\n-9,-4,-1\n的MAX:");
MAX(c,3,3);
int d[]={-1,2,-3,
-4,5,-6 };
printf("\n-1,2,-3\n-4,5,-6\n的MAX:");
MAX(d,2,3);
}


对函数进行测试:
分别对 正、负、正负、n*n、n*m型二维数组进行了测试。

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