二维数组最大子数组的和(结对练习)

本文介绍了一种将二维数组通过逐行累加转换为一维数组,并在此基础上求最大子数组和的算法。通过使用宏定义控制数组大小,实现了一维最大子数组和的求解,进而解决了二维数组的最大子矩阵和问题。
作业思路:
用宏定义表示长和宽控制二维数组的大小。采取逐行轮换相加的方法依次求若干行的最大子数组的和,利用一个一维数组来储存逐行轮换相加得到的一维数组,
再在该数组里求一维数组的最大子数组的和,这样就把二维数组转换成了一维数组,问题就迎刃而解了。


#include<iostream> using namespace std; #define M 4 #define N 4 int maxSubArray(int *a, int len) //最大子序列和 { int i, sum = a[0], b = 0; for (i = 0; i<len; ++i) { if (b>0) b += a[i]; else b = a[i]; if (b>sum) sum = b; } return sum; } int maxSubMatrix(int n, int m, int array[M][N]) { int i, j, h, max, sum = -100000; int b[100]; for (i = 0; i < n; i++) { memset(b, 0, sizeof(b)); //初始化b[] for (j = i; j < n; j++) //把第i行到第j行相加,对每一次相加求出最大值 { for (h = 0; h<m; h++) { b[h] += array[j][h]; //求最大子序列和 } max = maxSubArray(b, h); if (max>sum) sum = max; } } return sum; } int main() { int arr[M][N] = {{13, 5,-23,9}, {-17,21,30,12},{-111,0,21,13},{50,12,-10,18}}; cout << "最大子数组为:" << endl; cout << maxSubMatrix(M, N, arr) << endl; system("pause"); return 0; }

 总结:

   目前程序大体上能运行出结果了,但是整个程序还有很大的不足,没有随机数的应用以及数组的输入必须在程序中进行等等一系列的问题,我们在查阅和讨论中认识到自己的不足之处。

结对(博客园id:雷焱)

 

转载于:https://www.cnblogs.com/av-7845/p/9825344.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值