zoukankan      html  css  js  c++  java
  • 二维数组的最大子数组

    题目:二维数组的最大子数组

    成员:马国彬-20113000 李小超-20113003

    思路:

           此程序,我们通过对上一次一维数组的改进,实现了二维数组的功能。如果不考虑时间复杂度,用2个for循环能够找出一维数组的最大子数组,而通过3层for循环,就能够找出二维数组的最大子数组。在第2层for循环里,分别写两个for循环,分别寻找每一行和每一列的最大子数组。然后第3个for循环里一共有4层循环,来实现找出能够合并行列的最大子数组。开始把max设置为a[0][0],然后设置一个s,每执行一次循环,就执行s=s+a[i][j],然后如果s比max大,就把s的值赋给max,最后就能找出最大子数组。

    纸上的设计:

    代码:

    // 二维最大子数组.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include<stdio.h>
    
    int main(int argc, char* argv[])
    {
        int a[4][5]={2,1,-3,-2,1,3,1,5,-3,-8,3,-1,-3,-2,6,2,4,6,-8,-3};
        int i,j,s=0,c,d,t,max,m,n,k,x,y;
        for(i=0;i<4;i++)
        {
            for(j=0;j<5;j++)
            {
                s=0;
                for(k=i;k<4;k++)
                {
                    s=s+a[k][j];
                    if(max<s)
                        {
                            max=s;
                            c=k;
                            d=j;
                            m=i;
                            n=j;
                        }
                }
                s=0;
                for(t=j;t<5;t++)
                {
                    s=s+a[i][t];
                    if(max<s)
                        {
                            max=s;
                            c=i;
                            d=t;
                            m=i;
                            n=j;
                        }
                }
                s=0;
               for(k=i;k<4;k++)
               {
                   for(t=j;t<5;t++)
                   {
                       s=0;
                       for(x=i;x<=k;x++)
                       {
                           for(y=j;y<=t;y++)
                           {
                               s=s+a[x][y];
                           }
                       }
                       if(max<s)
                        {
                            max=s;
                            c=x-1;
                            d=y-1;
                            m=i;
                            n=j;
                        }
                   }
               }
            }
        }
        printf("最大子数组为:从第%d行到%d行从第%d列到%d列最大值为:%d
    ",m,c,n,d,max);
        return 0;
    }

    实验截图:

  • 相关阅读:
    (转)MyEclipse +Servlet
    Android: MediaRecorder start failed
    Android: 帮助找出内存泄漏的工具
    Node & Express: some tips
    MySQL: Create Master
    scp: useful commands
    MySQL: 打开binlog选项后无法重启MySQL
    IIS: 配置web.config解决Maximum request length exceeded错误
    MySQL: 让MySQL支持颜文字emoji
    Linux: 通过命令行上传文件到ftp服务器
  • 原文地址:https://www.cnblogs.com/maguobin/p/3612477.html
Copyright © 2011-2022 走看看