#include <stdio.h>
#include <stdlib.h>
int max_matrix(int a[][5], int n)
{
int i = 0, j = 0, k = 0;
int max_sum = 0;
int *b = (int *)malloc(sizeof(int) * n);
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++)
b[j] = 0;
for(j = i; j < 3; j++) {
for(k = 0; k < n; k++)
b[k] += a[j][k];
int sum = maxSubArraySum(b, n);
if(sum > max_sum)
max_sum = sum;
}
}
free(b);
b = NULL;
return max_sum;
}
int maxSubArraySum(int* a, int n)
{
int sum = 0;
int tmp = 0;
int i = 0;
for(i = 0; i < n; i++) {
if(tmp < 0)
tmp = a[i];
else
tmp += a[i];
if(sum < tmp)
sum = tmp;
}
return sum;
}
int main(void)
{
int a[3][5] = {
{ -1, -2, 0, -3, -4},
{ -2, -3, 4, 5, -1},
{ -1, -1, 5, 3, 0}
};
int nResult = max_matrix(a, 5);
printf("nResult = %d\n", nResult);
return 0;
/*
打印
nResult = 17
网上给的说明不对,如果没有负号,最大值应该为35,即整个二位结构
*/
}
一个矩阵中最大的二维矩阵(元素和最大)
最新推荐文章于 2019-02-21 23:38:00 发布