zoukankan      html  css  js  c++  java
  • 返回一个二维整数数组中最大联通子数组的和

    设计思路:

          首先将二维数组中正整数的值找出来,之后找到每个正整数上下左右加起来为正的负数。之后判断是否联通,将小的负数排除掉,最后留下的是二维整数数组中最大联通子数组。

    程序代码:

      1 #include <iostream>
      2 #include <time.h>
      3 #define M 3
      4 #define N 5
      5 using namespace std;
      6 
      7 void main()
      8 {
      9     int a[M][N] = {0},b[M][N]={0};//判断联通性,0为未选中,1为选中,2为连通
     10     bool flg = 0; //判断是否有1存在,存在为O。
     11     int sum = 0; //最后和
     12 
     13     srand(unsigned((int)time(0)));
     14     for (int i = 0;i < M;i++)
     15     {
     16         for (int j = 0;j < N;j++)
     17         {
     18             a[i][j] = rand()%50 - 20;
     19             cout << a[i][j] << "	";
     20             if (a[i][j] >= 0)
     21             {
     22                 b[i][j] = 1;
     23             }
     24         }
     25         cout << endl;
     26     }
     27     cout << endl;
     28         
     29     for (int i = 0;i < M;i++)
     30     {
     31         for (int j = 0;j < N;j++)
     32         {
     33             if (b[i][j] == 1)
     34             {
     35                 if (a[i+1][j] + a[i][j] > 0 && b[i+1][j] == 0)
     36                 {
     37                     b[i+1][j] = 2;                            
     38                 }
     39                 if (a[i-1][j] + a[i][j] > 0 && b[i-1][j] == 0)
     40                 {
     41                     b[i-1][j] = 2;    
     42                 }
     43                 if (a[i][j-1] + a[i][j] > 0 && b[i][j-1] == 0)
     44                 {
     45                      b[i][j-1] = 2;        
     46                 }
     47                 if (a[i][j+1] + a[i][j] > 0 && b[i][j+1] == 0)
     48                 {
     49                     b[i][j+1] = 2;    
     50                 }                  
     51             }                        
     52         }
     53     }
     54 
     55     for (int i = 0;i < M;i++)
     56     {
     57         for (int j = 0;j < N;j++)
     58         {                
     59             flg = 0;
     60             if (b[i][j] != 0 && a[i][j] < 0)
     61             {
     62                 b[i][j] = 0;
     63                 for (int k = 0;k < M;k++)
     64                 {
     65                     for (int l = 0;l < N;l++)
     66                     {
     67                         if (b[k][l] != 0)
     68                         {
     69                             if ((b[k+1][l] <= 0 || b[k+1][l] > 2)&&
     70                                 (b[k-1][l] <= 0 || b[k-1][l] > 2)&&
     71                                 (b[k][l+1] <= 0 || b[k][l+1] > 2)&&
     72                                 (b[k][l-1] <= 0 || b[k][l-1] > 2))
     73                             {
     74                                 flg = 1;
     75                             }
     76                         }                                
     77                     }
     78                 }
     79                 if (flg)
     80                 {
     81                     b[i][j] = 2;
     82                 }                        
     83             }
     84         }
     85     }
     86 
     87     for (int i = 0;i < M;i++)
     88     {
     89         for (int j = 0;j < N;j++)
     90         {
     91             if (b[i][j] != 0)
     92             {
     93                 cout << a[i][j] << "	";
     94                 sum += a[i][j];
     95             }
     96             else
     97             {
     98                 cout << "**" << "	";
     99             }
    100         }
    101         cout << endl;
    102     }
    103     
    104     cout << "sum = " << sum << endl;
    105 }

    结果截图:

    总结:

      这个开始想思路的时候就感觉很难,编程的时候发现的确如此。实现的结果并不理想。虽然结果大部分会对,可是还是有一部分bug,本来是在往后补漏洞,修改,可是越补越多,感觉不应该这样。目前只能这样了。

  • 相关阅读:
    疫情环境下的网络学习笔记 python 5.8 数据库入门终章
    疫情环境下的网络学习笔记 python 5.7 navicat数据库,例题,sql注入
    疫情环境下的网络学习笔记 python 5.6 暂时看看
    疫情环境下的网络学习笔记 python 5.5 MYSql 表关系,外键
    疫情环境下的网络学习笔记 python 5.4 数据库基础
    疫情环境下的网络学习笔记 python 4.30 初识数据库
    疫情环境下的网络学习笔记 python 4.29 网络小项目
    XJOI 夏令营501-511测试11 游戏
    XJOI 夏令营501-511测试11 统计方案
    CF1197D Yet Another Subarray Problem
  • 原文地址:https://www.cnblogs.com/zrdm/p/4464113.html
Copyright © 2011-2022 走看看