您的位置:首页 > 其它

结对开发5_循环二维数组最大字数组

2015-04-03 12:46 204 查看
一、思想

    我们这次的思想和一维数组的思想一样,但是考虑到是二维的,所以其算法和结对开发3的算法一样。即加长数组的列数

  加以控制条件,最后求出最大子数组的和,并输出。

二、源代码

  

// 结对开发5.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
# include <iostream>
# include <string>
# define MaxRow 20
# define MaxCol 20
using namespace std;
int Arr[MaxRow][MaxCol];
int Array[MaxRow][2*MaxCol];
int SumArr(int x1,int y1,int x2,int y2)                    //子数组求和
{
int sum=0;
for(int i=x1;i<x2;i++)
{
for(int j=y1;j<y2;j++)
{
sum+=Array[i][j];
}
}
return sum;
}

void LoadFile(int Arr[][MaxCol],int & Row,int & Col)
{
FILE * infile = fopen("D:\\input.txt","r");
int num[100];
int count=0;
if(!infile)
{
cout<<"文件读取失败!"<<endl;
exit(-1);
}
else
{
char str[10];
fscanf(infile,"%[^,]%*c",str);
Row = atof(str);
fscanf(infile,"%[^,]%*c",str);
Col = atof(str);
while(!feof(infile))
{
fscanf(infile,"%[^,]%*c",str);
num[count++]=atof(str);
}
}
for(int i=Row-1;i>=0;i--)
{
for(int j=Col-1;j>=0;j--)
{
Arr[i][j]=num[--count];
}
}
for(int i=0;i<Row;i++)
{
for(int j=0;j<Col;j++)
{
Array[i][j] = Arr[i][j];
Array[i][j+Col] = Arr[i][j];
}
}
}

//测试函数
int main()
{
int Row=0;
int Col=0;
LoadFile(Arr,Row,Col);
for(int i=0;i<Row;i++)
{
for(int j=0;j<Col;j++)
{
cout<<Arr[i][j]<<"\t";
}
cout<<endl;
}
int x1,y1;                                //代表左上角点的横纵坐标
int x2,y2;                                //代表右上角点的横纵坐标
int flag1,flag2,flag3,flag4;        //(flag1,flag2)标识最大子数组的左上角坐标  (flag3,flag4)标识最大子数组的右下角坐标
flag1=flag2=flag3=flag4=0;
int max = Array[0][0];                //max存储比较过程中的最大值
for(x1=0;x1<Row;x1++)
{
for(y1=0;y1<Col;y1++)
{
for(x2=x1+1;x2<=Row;x2++)
{
for(y2=y1+1;y2<=2*Col;y2++)
{
if((y2-y1) > Col)
{
break;
}
if(SumArr(x1,y1,x2,y2)>max)
{
max = SumArr(x1,y1,x2,y2);
flag1=x1;
flag2=y1;
flag3=x2;
flag4=y2;
}
}
}
}
}
cout<<"最大子数组为:"<<endl;
for(int i=flag1;i<flag3;i++)
{
for(int j=flag2;j<flag4;j++)
{
cout<<Array[i][j]<<"\t";
}
cout<<endl;
}
cout<<"该最大子数组的和为:"<<max<<endl;
return 0;
}


三、运行结果截图

  


四、总结

    二维循环数组的实现方式和一维的并没有很大的差别,主要的差别是在实现求出最大的字数组上,

  其他的和一位数组的实现方式一样。所以,在这次的实现中并没有遇到特别难的问题。

五、结对照片

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: