64,649
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
int MaxArray2D(int **A,int N,int M,int X,int Y,int in,int im)
{
int sum = 0;
for(int i=in,ii=0;ii<X;++ii,++i)
for(int j=im,jj=0;jj<Y;++j,++jj)
sum += A[i][j];
return sum;
}
int CreateArray2D(int ** &A,int N,int M)
{
int ret = -1;
if(!A){
A = new int *[N];
for(int i=0;i<N;++i)
A[i] = new int[M];
ret = 0;
}
return ret;
}
int InputArray2D(int **A,int N,int M)
{
int ret = -1;
if(A){
for(int i=0;i<N;++i){
for(int j=0;j<M;++j){
cout << "A["<<i+1<<"]["<<j+1<<"]:";
cin >> A[i][j];}
cout << "--------------"<<i+1<<"-----------"<<endl;}
ret = 0;
}
return ret;
}
void FreeArray2D(int ** &A,int N,int M)
{
if(A){
for(int i=0;i<N;++i)
if(A[i]){delete []A[i];A[i]=0;}
delete []A;
A = 0;}
}
int main()
{
int ret = -1;
int n,m,x,y,**a=0,max,t,xi=-1,yi=-1;
cout << "矩阵 行 列:";
cin >> n >> m;
cout << "子矩阵 行 列:";
cin >> x >> y;
if (n<=0||m<=0||x<=0||x>n||y<=0||y>m)
return ret;
if(CreateArray2D(a,n,m))return ret;
if(InputArray2D(a,n,m))return ret;
max = 0x80000000;
for(int i=0,ilimit=n-x;i<=ilimit;++i)
for(int j=0,jlimit=m-y;j<=jlimit;++j){
if((t=MaxArray2D(a,n,m,x,y,i,j))>max){
max = t;
xi = i; yi =j;}
cout << "["<<i<<"]["<<j<<"]: Max="<<max <<" sum="<<t<<endl;}
if(xi>=0 && yi>=0){
for(int i=xi,ii=0;ii<x;++i,++ii){
for(int j=yi,jj=0;jj<y;++j,++jj)
cout << a[i][j] << " ";
cout << endl;}
cout << "最大元素和是:"<< max <<endl;}
FreeArray2D(a,n,m);
ret = 0;
return ret;
}