數組問題(三)求二維整型數組最大聯通子數組的和

來源:互聯網
上載者:User

標籤:

相較於上次求最大子矩陣的和,這次明顯更難了一些。

將問題分解並分析,可以想到 先求各行中的最大子數組,並記錄下標,求完之後再將各行的最大子數組的下標進行比較可以得到兩種情況

1.上一行的最大子數組下標範圍和下一行的最大子數組下標範圍有重合的部分。

2.上一行的最大子數組下標範圍和下一行的最大子數組下標範圍無重合的部分。

程式碼:

#include<iostream>using namespace std;int calculate(int n,int a[],int &sm,int &mm){    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];             mm = i;         }    }     for (i = mm;i >= 0;i--)    {        if (b[i] == a[i])        {             sm= i;             break;        }    }     return max1;}int main(){    int row,line,sm,mm,t2,sum,max;    int up[10],down[10],t[10],b[10];    cout<<"輸入數組的行: ";    cin>>row;    cout<<"輸入數組的列: ";    cin>>line;    int **a;    a = new int*[row];    for(int i=0; i<row;i++)    {        a[i] = new int [line];    }    cout<<"請輸入數組元素:"<<endl;    for(int i=0;i<row;i++)    {        for(int j=0;j<line;j++)        {            cin>>a[i][j];        }    }     for(int i=0;i<row;i++)    {        for(int j=0;j<line;j++)        {            b[j]=a[i][j];        }        sum=calculate(line,b,sm,mm);        up[i]=sm;                                           down[i]=mm;        t[i]=sum;     }    t2=t[0];    for(int i=0;i+1<row;i++)    {        if(up[i]<=down[i+1] && down[i]>=up[i+1])        {            t2+=t[i+1];        }         for(int j=up[i];j<up[i+1];j++)        {            if(a[i+1][j]>0)            {                t2+=a[i+1][j];            }        }    }    cout<<"最大聯通子數組的和是:"<<t2<<endl;    for(int i=0;i<row;i++)    {        delete [] a[i];    }    delete [] a;    system("pause");    return 0;}

這次實驗嘗試了各種方法,都是太複雜的方法,難以實現,這個方法雖然不難,但是還是有缺陷,以後我們會改正。

組員:趙承聖,羅元浩(http://www.cnblogs.com/lyhao/)

數組問題(三)求二維整型數組最大聯通子數組的和

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.