求一个矩阵中最大的二维矩阵(元素和最大)
来源:互联网 发布:手机怎么看淘宝店铺 编辑:程序博客网 时间:2024/05/16 23:55
求一个矩阵中最大的二维矩阵(元素和最大).如:
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是:
4 5
5 3
1 2 0 3 4
2 3 4 5 1
1 1 5 3 0
中最大的是:
4 5
5 3
要求:(1)写出算法;(2)分析时间复杂度;(3)用C写出关键代码
分析:
其实我感觉题目给的例子是错误的,既然矩阵元素都是正数,那么整个矩阵的和不是最大吗?
按照这个思路我写了一段代码(利用最大子段和)。
#include <stdio.h>#include <stdlib.h>#include <time.h>#define iRow 3#define iCol 3typedef struct {int imaxValue; //最大子段的和int iFront; //最大子段的起点坐标int iRear; //最大子段的终点坐标}maxInfo;int arr[10][10]; //二维矩阵void CreateArray(); //初始化矩阵maxInfo calBCS(int *arrBCS); //求最大子段和void calBMetricSum(); //计算最大二维子矩阵的和int main(){CreateArray();calBMetricSum();return 0;}void CreateArray(){int i,j;FILE *infile=fopen("E://a.txt","r");if (!infile){return ;}for (i=0;i<iRow;i++){for (j=0;j<iCol;j++){fscanf(infile,"%d",&arr[i][j]);}}fclose(infile);}maxInfo calBCS(int *arrBCS){int i,itempSum=0,iFront=0,iRear=0; //itempSum为存储当前和,iFront为当前子段的起点坐标,iRear为终点坐标maxInfo maxinfo; //记录最大子段的信息maxinfo.imaxValue=-32767; //先赋最小值for (i=0;i<iCol;i++){if (arrBCS[i]>=itempSum+arrBCS[i]){itempSum=arrBCS[i];iFront=iRear=i;}else{itempSum+=arrBCS[i];iRear++;}if (itempSum>maxinfo.imaxValue){maxinfo.imaxValue=itempSum;maxinfo.iFront=iFront;maxinfo.iRear=iRear;}}return maxinfo;}void calBMetricSum(){int i,j,k,iRowUp,iRowDown; //iRowUp为最大子矩阵的第一行所在原矩阵中的行数,iRowDown为最下一行所在的行数int arrBCS[10]; //记录当前矩阵每列的和,即子序列maxInfo backValue,maxSum; //backValue为从最大子段和函数返回的信息,maxSum为最大子矩阵的相关信息maxSum.imaxValue=-32767;for (i=0;i<iRow;i++){memset(arrBCS,0,sizeof(arrBCS));for (j=i;j<iRow;j++){for (k=0;k<iCol;k++){arrBCS[k]+=arr[j][k]; //累加当前矩阵每一列的和}backValue=calBCS(arrBCS);if (backValue.imaxValue>maxSum.imaxValue) {maxSum=backValue;iRowUp=i;iRowDown=j;}}}printf("The max sum of the metric is : %d\n",maxSum);for (i=iRowUp;i<=iRowDown;i++){for (j=maxSum.iFront;j<=maxSum.iRear;j++){printf("%3d",arr[i][j]);}printf("\n");}}
- 一个矩阵中最大的二维矩阵(元素和最大)
- 【每日面试题】求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维子矩阵(元素和最大)
- 【100题】三十五 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的矩阵(元素和最大)(二维情况)
- 求一个矩阵中最大的二维矩阵(元素和最大).
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 100题求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维矩阵(元素和最大)
- 29. 微软面试题:求一个矩阵中最大的二维矩阵(元素和最大)
- 35 求一个矩阵中最大的二维矩阵(元素和最大)
- 求一个矩阵中最大的二维子矩阵(元素和最大)
- Microsoft Silverlight 4从入门到精通之鼠标事件
- 简述Android触摸屏手势识别 GestureDetector
- 第9章 使用动画和拖放 (二)
- Ping 程序C#实现方法二
- Workqueue机制的实现
- 求一个矩阵中最大的二维矩阵(元素和最大)
- QT的内部进程通信
- 51单片机PSW之CY与OV的联系与区别
- 关于 Tenda w311r 管理员权限 的安全问题
- 第10章 简化 AJAX 和动态加载 (一)
- 第10章 简化 AJAX 和动态加载 (二)
- 双向循环链表
- mfc 文件 文件夹操作大全
- CentOS 5 安装 JDK 1.6(整理)