zoukankan      html  css  js  c++  java
  • 求一个数组的最大子数组之和03

    这次求二维数组的最大子连通数组:

    这次的要求有点偏难在好多同学的指导下才完成此任务

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

    合作人:靳琪

  • 相关阅读:
    spring-security原理
    win10忘记密码,重置密码
    ELK环境搭建
    Centos8.2安装docker
    pgsql重启
    什么是网站跳出率
    随记
    javascript中apply、call和bind的区别
    Android与Mysql服务器通信
    CentOS 7 最小化安装之后安装Mysql
  • 原文地址:https://www.cnblogs.com/zjy666/p/5360226.html
Copyright © 2011-2022 走看看