二维数组最大子数组和的求解

Posted 4ey4ever

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组最大子数组和的求解相关的知识,希望对你有一定的参考价值。

 一.设计思想
      首先要用一段代码,可以读入txt文件里的二维数组。需要将txt文件放入同一目录。 
      其次要用一段代码得到最大子数组的和:主要思路与求一维数组方法相差不多,不过要有更多的循环和判断汲取了先者的成果,我们得出了方法。思路如下:

   1.得到子数组的最大行、列数,从第一行开始,确定最大子数组的行列范围。

   2.将确定的范围,把最大子数组按照一列有几个数,按行分开成。(例如第一个组中只有一行,而第二个组中有两行,列数和数组的列数保持一致)

   3,对2中得到的数组,利用一维数组求子数组之和的方法。求出最大值,比较得到最大的一个

   4.使行列的最大上界下减1,重复进行第2 、3、4步。
二.代码
 1 #include<iostream>
 2 #include <stdio.h> 
 3 using namespace std;
 4 
 5 FILE *fpRead=fopen("input.txt","r");
 6 
 7 char cgetchar(){
 8     char c;
 9     fscanf(fpRead,"%c",&c);
10     return c;
11 }
12 
13 int getnum(){
14     char c;
15     int num = 0, fuhao = 1;
16     while((c = cgetchar()) != EOF && (0 > c || 9 < c) && c != -);
17     if(c == -) fuhao = -1;
18     else num = c - 0;
19     while((c = cgetchar()) != EOF && 0 <= c && 9 >= c){
20         num = num * 10 + c - 0;
21     }
22     return num * fuhao;
23 }
24 
25 int main ()
26 {
27     int x,y,i,j,m=0,A[100][100];
28  
29     x = getnum();
30     y = getnum();
31     if(x>100||y>100)
32     {
33         cout<<"请重新输入:";
34         cin>>x>>y;
35     }
36     for(i=0;i<x;i++)
37     {
38         for(j=0;j<y;j++)
39         {
40             A[i][j] = getnum();
41             printf("%d ", A[i][j]); 
42         }
43         printf("
");
44  
45     }
46     int sum[100]={0},max=0,result=A[0][0];
47  
48     for(i=0;i<x;i++)//确定子数组的最大上界(为第i行)
49     {
50         while(m+i<x)//确定子数组有m+i行
51         {
52             //把子数组当成一位数组一样,求最大子数组的和
53             for(j=0;j<y;j++)
54             {
55                 sum[j]=sum[j]+A[m+i][j];
56  
57             }
58             max=0;
59             for(j=0;j<y;j++)
60             {
61                 if(max+sum[j]>sum[j])
62                 {
63                     max=max+sum[j];
64                 }
65                 else
66                 {
67                     max=sum[j];
68                 }
69                 if(max>result)
70                 {
71                     result=max;
72                 }
73             }
74             m++;//是子数组的行数+1
75         }
76         m=0;
77         for(j=0;j<y;j++)
78         {
79             sum[j]=0;
80         }
81     }
82     cout<<result;
83     return 0;
84 }

三.运行截图及所用txt数据

技术分享图片

技术分享图片

 

 

技术分享图片

四.项目计划总结

技术分享图片

五.和队友并肩作战的照片(苏雄,张洪胜)

技术分享图片

 

 











以上是关于二维数组最大子数组和的求解的主要内容,如果未能解决你的问题,请参考以下文章

返回一个二维整数数组最大子数组的和

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组中最大子数组的和的小程序

返回一个二维整数数组中最大子数组的和

返回一个二维整数数组中最大子数组的和