二维数组最大连通子数组之和
问题:返回一个二维整数数组中最大联通子数组的和
思路:把数按行分成几个一维数组,对于该一维数组,求出他们的最大连续数组之和,并且记录下最大连续数组的第一位和最后一位的位置,之后判断几个一维数组的最大连续数组的位置是否相接或包括(如,第一行是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
二维数组最大连通子数组之和相关推荐
- 用C语言编写程序计算对角线的和,C语言入门级代码 计算二维数组主对角线上的元素之和...
镇场诗:吾心为他人,此智不私藏.学术有小成,愿帮大家忙. // #include void main(){ int i=0,j=0; int a[4][4]={{1,2,3,4},{1,2,3,4}, ...
- 系统给定外部整型变量ndsum和整型二维数组a (不需要自行定义)。编写程序,求n*n二维数组a的主对角线元素之和dsum。...
这是一个可以用来解决问题的 C 语言代码示例: #include <stdio.h>int main() {int ndsum = 0;int a[n][n];for (int i = 0 ...
- [算法]二维数组前缀和
本文目录 引言 题引 题目描述 输入 输出 样例输入 样例输出 解题过程 暴力求解 二维前缀和数组求解 [解读] 二维前缀和算法 本质 图解 代码表述 牛刀小试 题目描述 输入格式 输出格式 输入样例 ...
- matlab建成二维数组,matlab绘制二维数组
hist 累计图 rose 极座标累计图 stairs 阶梯图 stem 针状图 fill 实心图 feather 羽毛图 compass 罗盘图 quiver 向量场图 Matlab 如何画出一个二 ...
- 算法-求数组的子数组之和的最大值
一个一维int数组,这个数组有很多子数组,那么子数组之和的最大值是什么呢? 思考 1.题目说的子数组是连续的: 2.题目只需要求和,并不需要返回子数组的具体位置: 3.数组的元素是整数,所以数组可能包 ...
- 汇编语言-016(SCASB 、STOSB 、LODSD 、数组中的取值、二维数组操作、冒泡排序和二分查找、CMPSW )
1: SCASB : (字节)将AL的值与EDI寻址的一个字比较.进行在一个字符串检索特定的字符 .386 .model flat,stdcall.stack 4096 ExitProcess PRO ...
- C语言 基础60题(2)——二维数组操作
本篇内容主要是是对二维数组操作,掌握二维数组作为参数传递时,如何用指针表示. 第10题 double sum_2diagonal(double* array_2d, unsigned int m, ...
- 二维数组的最大联通子数组和
设计题目:求一个二维数组的连通的数组中和最大的最大值. 设计思路: 建立二维数组并遍历二维数组,将所有正整数分块,验证是否联通,如果不联通,判断路径. package demo; import jav ...
- java 二维数组的定义及操作
二维数组的定义有很多方式: 第一种方式: 数据类型[][] 数组名 = new数据类型[行的个数][列的个数]; 下面以第一种方式声明一个数组,如下所示. int[][] xx= new int[3] ...
最新文章
- 【算法】算法 第四版 练习题的解法
- 今天,我种下了一朵小蓝花
- Java Socke 探究
- eclipse pmd使用_使用您自己的规则在Eclipse中自定义PMD
- @autowired注解注入为null_Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
- 配置openldap_openldap环境搭建+集成JIRA服务
- 很不错的python 机器学习博客
- PHP调用类函数定义位置,OOP PHP – 如何有选择地调用类的构造函数中定义的特定方法?...
- matlab物理应用编程,MATLAB在普通物理中的应用
- vue-router个人总结
- Linux英伟达驱动程序下载和安装
- 免费开源网站系统有哪些
- mysql查询时 全外連接_MySQL数据库左外连接、右外连接、全外连接
- 【铁矿石期货怎么开通】11月22日午盘基本面资讯整理
- 可获取公网IP的网址
- 封装一个学生类Student(使用类与对象的方法)
- 使用python框架Django搭建web应用
- Linux 系统安全检查
- 关于unity数值资源序列化后在windows和android平台的本地读取
- 12【源码】数据可视化:基于 Echarts +Java SpringBoot 实现的动态实时大屏范例 - 供应链