题目要求:求二维数组的的子矩阵的最大的和
设计思路:若分别求出每行的最大子数组,再逐行相加的求,考虑到行与行的子数组间未必有交集,所以不知道去怎么处理,于是只好想到了穷举法,即从原二维数组的每个元素逐一开始求出每个 子矩阵的和,找出最大值。这个方法就是有些麻烦,程序中用到了六个for循环。
import java.util.*; public class shuzu4 { public static int max(int a[][],int row,int col) { int sum=0,t=a[0][0]; for(int i=0; i<row;i++) { for(int j=0;j<col;j++) {//两个外层for循环遍历数组元素 for(int p=i;p<row;p++) { for(int l=j;l<col;l++){//两个中层for循环控制子矩阵边界 for(int m=i;m<=p;m++) { for(int n=j;n<=l;n++) {//两个内层for循环用来求子矩阵元素和 sum+=a[m][n]; } } if(sum>t) //每进行完一个子矩阵的运算,都和t值比较,找出最大sum值 t=sum; sum=0; } } } } return t; } public static void main(String []args) { Scanner input=new Scanner(System.in); System.out.println("请输入二维数组的行数和列数:"); int row=input.nextInt(); int col=input.nextInt(); int [][]a=new int[row][col]; System.out.println("请输入数组:"); for(int i=0;i<row;i++) { for(int j=0;j<col;j++) { a[i][j]=input.nextInt(); } } System.out.print("子矩阵的最大的和为:"); System.out.println(max(a,row,col)); } }