问题:返回一个二维整数数组中最大联通子数组的和

思路:把数按行分成几个一维数组,对于该一维数组,求出他们的最大连续数组之和,并且记录下最大连续数组的第一位和最后一位的位置,之后判断几个一维数组的最大连续数组的位置是否相接或包括(如,第一行是1和4,第二行是3和5,这样就相连)。最后在加上没有包括的正数(必须在上一行的最大连续数组的第一位和最后一位的位置之间)。输出之前之和就行。

缺陷:数组中不可以出现0,现在的程序只能解决最大连续数组相连的,还不能解决不相连的,对于最后今加上剩余的正数,只会加上与第一行重合的,第三行以及以下的行并不加上前一步加上的第二行的正数。

代码

#include<iostream>
using namespace std;int Max(int n,int a[],int *smark,int *mmark)
{int b[100]={0};int i,sum1=0,max1=0;for(i=0;i<n;i++){if(sum1<0){sum1=a[i];}else{sum1=sum1+a[i];}b[i]=sum1;}max1=b[0];for(i=0;i<n;i++){if (max1<b[i]) {max1= b[i];*mmark = i;}}for (i = *mmark;i >= 0;i--) {if (b[i] == a[i]) {*smark = i;break;}}return max1;
}void main()
{int m,n,i,j,smark,mmark,t2;int sum,max;int up[100],down[100],t[100];int a[100][100],b[100];cout<<"输入二维数组的行和列";cin>>m>>n;for(i=0;i<m;i++){for(j=0;j<n;j++){cin>>a[i][j];}}for(i=0;i<m;i++){for(j=0;j<n;j++){b[j]=a[i][j];}sum=Max(n,b,&smark,&mmark);up[i]=smark;                                    down[i]=mmark;t[i]=sum;}t2=t[0];for(i=0;i+1<m;i++){if(up[i]<=down[i+1] && down[i]>=up[i+1]){t2+=t[i+1];}for(j=up[i];j<up[i+1];j++){if(a[i+1][j]>0) t2+=a[i+1][j];                   //判别独立正数}}cout<<t2<<endl;}

  

截图

总结:之前认为二维数组的题大概都会了,坐完这道题,发现我还差很多,就行以后的学习之路,永无止境,永远没有尽头

转载于:https://www.cnblogs.com/double1/p/4459350.html

二维数组最大连通子数组之和相关推荐

  1. 用C语言编写程序计算对角线的和,C语言入门级代码 计算二维数组主对角线上的元素之和...

    镇场诗:吾心为他人,此智不私藏.学术有小成,愿帮大家忙. // #include void main(){ int i=0,j=0; int a[4][4]={{1,2,3,4},{1,2,3,4}, ...

  2. 系统给定外部整型变量ndsum和整型二维数组a (不需要自行定义)。编写程序,求n*n二维数组a的主对角线元素之和dsum。...

    这是一个可以用来解决问题的 C 语言代码示例: #include <stdio.h>int main() {int ndsum = 0;int a[n][n];for (int i = 0 ...

  3. [算法]二维数组前缀和

    本文目录 引言 题引 题目描述 输入 输出 样例输入 样例输出 解题过程 暴力求解 二维前缀和数组求解 [解读] 二维前缀和算法 本质 图解 代码表述 牛刀小试 题目描述 输入格式 输出格式 输入样例 ...

  4. matlab建成二维数组,matlab绘制二维数组

    hist 累计图 rose 极座标累计图 stairs 阶梯图 stem 针状图 fill 实心图 feather 羽毛图 compass 罗盘图 quiver 向量场图 Matlab 如何画出一个二 ...

  5. 算法-求数组的子数组之和的最大值

    一个一维int数组,这个数组有很多子数组,那么子数组之和的最大值是什么呢? 思考 1.题目说的子数组是连续的: 2.题目只需要求和,并不需要返回子数组的具体位置: 3.数组的元素是整数,所以数组可能包 ...

  6. 汇编语言-016(SCASB 、STOSB 、LODSD 、数组中的取值、二维数组操作、冒泡排序和二分查找、CMPSW )

    1: SCASB : (字节)将AL的值与EDI寻址的一个字比较.进行在一个字符串检索特定的字符 .386 .model flat,stdcall.stack 4096 ExitProcess PRO ...

  7. C语言 基础60题(2)——二维数组操作

    本篇内容主要是是对二维数组操作,掌握二维数组作为参数传递时,如何用指针表示. 第10题 double  sum_2diagonal(double* array_2d,  unsigned int m, ...

  8. 二维数组的最大联通子数组和

    设计题目:求一个二维数组的连通的数组中和最大的最大值. 设计思路: 建立二维数组并遍历二维数组,将所有正整数分块,验证是否联通,如果不联通,判断路径. package demo; import jav ...

  9. java 二维数组的定义及操作

    二维数组的定义有很多方式: 第一种方式: 数据类型[][] 数组名 = new数据类型[行的个数][列的个数]; 下面以第一种方式声明一个数组,如下所示. int[][] xx= new int[3] ...

最新文章

  1. 【算法】算法 第四版 练习题的解法
  2. 今天,我种下了一朵小蓝花
  3. Java Socke 探究
  4. eclipse pmd使用_使用您自己的规则在Eclipse中自定义PMD
  5. @autowired注解注入为null_Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
  6. 配置openldap_openldap环境搭建+集成JIRA服务
  7. 很不错的python 机器学习博客
  8. PHP调用类函数定义位置,OOP PHP – 如何有选择地调用类的构造函数中定义的特定方法?...
  9. matlab物理应用编程,MATLAB在普通物理中的应用
  10. vue-router个人总结
  11. Linux英伟达驱动程序下载和安装
  12. 免费开源网站系统有哪些
  13. mysql查询时 全外連接_MySQL数据库左外连接、右外连接、全外连接
  14. 【铁矿石期货怎么开通】11月22日午盘基本面资讯整理
  15. 可获取公网IP的网址
  16. 封装一个学生类Student(使用类与对象的方法)
  17. 使用python框架Django搭建web应用
  18. Linux 系统安全检查
  19. 关于unity数值资源序列化后在windows和android平台的本地读取
  20. 12【源码】数据可视化:基于 Echarts +Java SpringBoot 实现的动态实时大屏范例 - 供应链

热门文章

  1. 移动端采用Flexible将PX转换REM适配及开发中Retina屏1px边框的两种解决方案
  2. POI (Apache POI)
  3. CDOJ 1401 谭爷的黑暗沙拉 数学
  4. 新概念英语第三册01-20课(转)
  5. C#控制台程序取得INSOYA视频区的视频的真实URL,视频标题,发布时间集合。
  6. 轻松实现web高可用!(keepalived实战讲解)
  7. Spark 系列(一)—— Spark 简介
  8. 服务器操作系统co,搭建coturn服务器
  9. 清官谈mysql中utf8和utf8mb4区别
  10. 微信公众平台开发模式背后的原理?