二维数组联通子数组和最大

Posted 野野

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组联通子数组和最大相关的知识,希望对你有一定的参考价值。

 

题目要求:

返回一个二维整数数组中最大联通子数组的和。
输入一个二维整形数组,数组里有正数也有负数。
 
  文件输出。
 

思路:和之前的动态规划相识,把二维数组转换为一维数组,先求每一个列的子数组和最大,最后在用正数就加,负数就跳过的方法独立判断

 

#include<iostream>
using namespace std;
#include<ctime>
#include<fstream>

void main()
{
    int m,n,i,j,smark,mmark,t2;
    int sum;
    int up[100],down[100],t[100];
    int a[100][100],b[100];
    cout<<"输入二维数组的行"<<endl;
    cin>>m;
    cout<<"输入二维数组的列"<<endl;
    cin>>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];
        }
        int c[100]={0};
        int sum1=0,max1=0,k;

        for(k=0;k<n;k++)           //在列上求每一个最大子数组
        {
            if(sum1<0)
            {
                sum1=b[k];
            }
            else
            {
                sum1=sum1+b[k];
            }
            c[k]=sum1;
        }

        max1=c[0];

        for(k=0;k<n;k++)           
        {
            if (max1<c[k])
            {
                max1= c[k];
                mmark = k;
            }
        }

        for (k = mmark;k >= 0;k--)
        {
            if (c[k] == b[k])
            {
                smark = k;
                break;
            }
        }

        sum=max1;
       
        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];                   //判别独立正数
        }
 
    }
                                                            //文件输出
    ofstream fout("D:\\\\input.txt",ios::binary);

    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
           fout<<a[i][j]<<" ";
           
        }
        fout<<endl;
    }
 
    fout<<"最大联通子数组的和为:"<<t2<<endl;
 
}

以上是关于二维数组联通子数组和最大的主要内容,如果未能解决你的问题,请参考以下文章

二维数组最大子数组(结对开发)

二维数组最大子数组(结对开发)

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

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

返回二维数组最大联通子数组的和

软件工程个人作业05(二维数组求最大子数组的和)