码迷,mamicode.com
首页 > 编程语言 > 详细

返回一个二维循环数组中最大子矩阵的和

时间:2015-04-22 22:08:37      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:

设计思路

和一维循环数组思路相仿,循环N次,每次将第一列的数移到最后一列,新建一个相同规格的二维数组来存放新矩阵,将之前写的求二维数组最大子矩阵的和的算法稍作修改,添加一个循环即可满足要求。

源程序代码

#include<iostream>

#include <cstdlib>

#include <ctime>

using namespace std;

#define M 4

#define N 4

 

void main()

{

     int a[M][N],aa[M][N],i,j,b,c,z;

     cout<<"请输入数值范围:"<<endl;

     cin>>b>>c;

     cout<<"生成二维数组为:"<<endl;

     srand(unsigned(time(0)));

     for(i=0;i<M;i++)

     {

         for(j=0;j<N;j++)

         {

              a[i][j]=rand()%(c-b+1)+b;

              cout<<a[i][j]<<" ";

         }

         cout<<endl;

     }

     int sum,s[100],k=0,o=-1000,p=-1000,q=-1000;

     for(j=0;j<N;j++)

     {

         s[j]=0;

     }

     for (int lun=0;lun<N;lun++)

     {

         for (int lunm=0;lunm<M;lunm++)

         {

              for (int lunn=0;lunn<N;lunn++)

              {

                   if (lunn+lun<N)

                   {

                       aa[lunm][lunn]=a[lunm][lunn+lun];

                   }

                   else

                       aa[lunm][lunn]=a[lunm][lunn+lun-N];

              }

         }

         for(int ii=0;ii<M;ii++)

         {

              while(k+ii<M)

              {

                   for(j=0;j<N;j++)

                   {

                       s[j]=s[j]+aa[k+ii][j];

                   }

                   for (i=0;i<N;i++)

                   {

                       for (j=i;j<N;j++)

                       {

                            sum=0;

                            for (z=i;z<=j;z++)

                            {

                                 sum=sum+s[z];

                            }

                            if (sum>o) o=sum;

                       }

                       if (o>p)

                       {

                            p=o;

                       }

                   }

                   k++;

              }

              if (p>q)

              {

                   q=p;

              }

              k=0;

              for(j=0;j<N;j++)

              {

                   s[j]=0;

              }

         }

     }

     cout<<"子矩阵最大值为:"<<q<<endl;

}

运行结果截图

技术分享

编程总结

在原代码的基础上修改代码可以节省许多时间,所以要能够熟练的读懂代码、修改代码。

返回一个二维循环数组中最大子矩阵的和

标签:

原文地址:http://www.cnblogs.com/BUANG/p/4448774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!