【C】二维数组求最大子数组(基于一维数组的拓展)
2014-03-19 16:26
197 查看
本方法是基于一维数组来思考的,利用一维数组来描绘出二维数组,从而简化对二维数组求最大子数组的难度。即(a[i][j] = a[i*n+j],用一维数组表示二维数组)
对函数进行测试:
分别对 正、负、正负、n*n、n*m型二维数组进行了测试。
#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型二维数组进行了测试。
相关文章推荐
- 【C】二维数组求最大子数组(基于一维数组的拓展)
- 一维数组和二维数组的最大连续子数组问题
- 有一个整型二维数组,假设a[3][4] = {初始化了值},求出这个二维数组中所有的最大值,以及最大值对应的下标。 数组内部原有的值不能改变位置。
- 软件工程概论---环状二维数组最大子数组和
- 一维数组和指针数组和数组指针,以及扩展到二维数组和二级指针的分析和区别
- 返回二维数组最大联通子数组的和
- 返回一个二维数组最大联通子数组的和
- [拓展]杭电1003(最大子数组问题)
- 数组(一维数组和二维数组)的用法
- 二维数组求最大子数组
- 体验结对开发的乐趣(5)--(首尾相连的二维数组求最大子数组和的问题)
- 函数调用输出一个一维数组中的最大值、最小值、全部元素的和,并将此数组中的值按逆序重新存放。
- 【Java学习笔记之九】java二维数组及其多维数组的内存应用拓展延伸
- 求二维数组的最大子数组
- 如何判断一个数组是一维数组或者是二维数组?用什么函数?
- 求二维数组最大子数组的和
- 字符串分割成一维数组、二维数组,一维数组与二维数组之间的转换
- 二维数组的最大联通数组
- 环状二维数组最大子数组和
- 求二维数组中最大字数组的和