• 二维数组求子数组中最大的和


        上次的课堂编程题目是一维数组中子数组的和,现在难度加大了不少,二维数组需要考虑的方面很多,这个程序我是在上个课堂题目基础上加以改善完成的,核心代码如下:

    int maxSubArray(int a[], int n)
    
    {
    
        assert(a!=NULL && n>0);
    
        int cur = 0;
    
        int max = INF;
    
     
    
        for(int i=0; i<n; i++)
    
        {
    
            cur += a[i];
    
     
    
            //当cur小于0时,应该重新开始计数.
    
            if(cur < 0)
    
                cur = 0;
    
     
    
            if(cur > max)
    
                max = cur;
    
        }
    
        return max;
    
    }
    
     
    
    int findMaxSubMatrix(int a[][N], int n)
    
    {
    
        int tmpSum[N];
    
        int max = INF;
    
     
    
        //枚举所有行的可能组合。
    
        for(int i=0; i<n; i++)
    
        {
    
            //将tmpSum清零。
    
            memset(tmpSum,0,sizeof(tmpSum));
    
            for(int j=i; j<n; j++)
    
            {
    
                //加上当前行的元素。
    
                for(int k=0; k<n; k++)
    
                    tmpSum[k] += a[j][k];
    
                int tmpMax = maxSubArray(tmpSum, n);
    
                if(tmpMax > max)
    
                    max = tmpMax;
    
     
    
            }
    
        }
    
        return max;
    
    }
    
     
    
    int main()
    
    {
    
        int a[N][N];
    
        int n = 0;
    
     
    
        while(cin>>n && n)
    
        {
    
            for(int i=0; i<n; i++)
    
                for(int j=0; j<n; j++)
    
                    cin>>a[i][j];
    
            cout<<findMaxSubMatrix(a, n)<<endl;
    
        }
    
         
    
        return 0;
    
    }

    程序运行结果截图:

  • 相关阅读:
    漫谈 IP 协议
    Git常用组合操作
    my questions of C#
    关于C#多态的思考
    设计模式:示例与思考
    C#环境搭建,以及C#编译器的使用
    网络模型和TCP协议族
    Understanding TCP/IP Network Stack
    Get on the CORBA
    Introduction to COBRA
  • 原文地址:https://www.cnblogs.com/feiji/p/3608899.html
Copyright © 2020-2023  润新知