结对开发6----首尾相连矩阵

结对成员:范德一    赵永恒

一.题目与要求

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

  要求、1、输入一个二维整形数组,数组里有正数也有负数。

     2、二维数组首尾相接,象个一条首尾相接带子一样。

     3、数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和

二.设计思路

  在上一次的以为循环数组的基础上,和二维数组求最大子数组相结合,将功能合并,完成题目要求。

  • 第一步、将每一行的数组作为循环数组求最大子数组
  • 第二步、通过枚举的方式,将每一种情况的和存入到新建二维数组中
  • 第三部、通过逐列计算最大子数组的方法求所有子矩阵的最大和

三.源代码

  1 #include "stdafx.h"
  2 
  3 #include "iostream"
  4 
  5 #include <vector> 
  6 
  7 using namespace std; 
  8 
  9     
 10 
 11 const int N = 101; 
 12 
 13 int a[N][N], p[N][N],b[N][N]; 
 14 
 15     
 16 
 17 int MaxRecSum(int n) 
 18 
 19 { 
 20 
 21     for (int i = 0; i <= n; ++i) 
 22 
 23     { 
 24 
 25         p[i][0] = 0; 
 26 
 27         p[0][i] = 0; 
 28 
 29     }    
 30 
 31     for (int i = 1; i <= n; ++i) 
 32 
 33     { 
 34 
 35         for (int j = 1; j <= n; ++j) 
 36 
 37             p[i][j] = p[i-1][j] + p[i][j-1] - p[i-1][j-1] +a[i][j]; 
 38 
 39     } 
 40 
 41     
 42 
 43     int max = INT_MIN; 
 44 
 45     for (int i = 1; i <= n; ++i) 
 46 
 47     { 
 48 
 49         for (int j = i; j <= n; ++j) 
 50 
 51         { 
 52 
 53             int sum = 0; 
 54 
 55             for (int k = 1; k <= n; ++k) 
 56 
 57             { 
 58 
 59                 int temp = p[j][k] - p[j][k-1] - p[i-1][k] + p[i-1][k-1]; 
 60 
 61                 if (sum > 0) 
 62 
 63                     sum += temp; 
 64 
 65                 else
 66 
 67                     sum = temp; 
 68 
 69                 if (sum > max) 
 70 
 71                     max = sum; 
 72 
 73             } 
 74 
 75         } 
 76 
 77     } 
 78 
 79     return max; 
 80 
 81 } 
 82 
 83     
 84 
 85 int main() 
 86 
 87 { 
 88 
 89  
 90 
 91     int n = 3; 
 92 
 93     int num; 
 94 
 95     cout<<"矩阵的规格为三行三列,请输入数值:"<<endl;
 96 
 97     for (int i = 1; i <= n; ++i) 
 98 
 99     { 
100 
101         for (int j = 1; j <= n; ++j) 
102 
103         { 
104 
105             cin >> num; 
106 
107             a[i][j] = num; 
108 
109         } 
110 
111     } 
112 
113        
114 
115    int b[3][6];
116 
117  
118 
119    for(int t=0;t<3;t++)
120 
121    {
122 
123        b[t][0]=a[t][0];
124 
125        b[t][1]=a[t][1];
126 
127        b[t][2]=a[t][2];
128 
129  
130 
131  
132 
133        b[t][3]=b[t][0];
134 
135        b[t][4]=b[t][1];
136 
137        b[t][5]=b[t][2];
138 
139    }
140 
141  
142 
143     cout <<"最大矩阵的和为:"<< MaxRecSum(n) << endl; 
144 
145       
146 
147     for (int i = 1; i <= n; ++i) 
148 
149     { 
150 
151         for (int j = 1; j <= n; ++j) 
152 
153         { 
154 
155             cout <<a[i][j]<<"   ";
156 
157         } 
158 
159         cout<<endl;
160 
161     } 
162 
163     return 0; 
164 
165 }

四.运行截图

 

五.实验感想

最近清明节的假期来得太突然、太多的心思没有放在这个程序上,最后的完成太仓促,没有太多实际的讨论和交流。不过在配合下能编出这个小程序还是很不错的,很多地方有待改进。下次两个人的心思应该专心一点。

六.结对成员合照

 

posted @ 2015-04-02 22:52  憨了个豆先生  阅读(206)  评论(0编辑  收藏  举报