假设我有一个大小的矩阵,比如5 * 6。 我需要所有子矩阵,即大小为1 * 1,1 * 2,2 * 5,3 * 2,5 * 4等。 我如何获得它?
for (i = 0; i < n; i++) {
for (j = 0; j < m; j++) {
int arr[][] = new int[i + 1][j + 1];
for (x = 0; x < i + 1; x++) {
for (y = 0; y < j + 1; y++) {
arr[x][y] = a[x][y];
System.out.print(arr[x][y] + " ");
}
System.out.println();
}
System.out.println("*********next********");
}
}
这是我的代码,直到现在。但这只是从0,0索引开始打印所需大小的子阵列。
答案 0 :(得分:2)
您可以尝试以下代码:
public static void printMatrix (int columnStart, int rowStart, int columnSize, int rowSize, int[][] matrix) {
if (columnStart+columnSize>matrix[0].length) return;
if (rowStart+rowSize>matrix.length) return;
for (int i=rowStart;i<rowStart+rowSize;i++) {
for (int j=columnStart;j<columnStart+columnSize;j++) {
System.out.print(matrix[i][j]+" ");
}
System.out.println();
}
System.out.println("*********next********");
}
public static void printAllSubMatrices (int[][] matrix) {
for (int i=0;i<matrix.length;i++) {
for (int m=1;m<matrix.length-i+1;m++) {
for (int j=0;j<matrix[0].length;j++) {
for (int n=1;n<matrix[0].length-j+1;n++) {
printMatrix(j, i, n, m, matrix);
}
}
}
}
}
public static void main(String[] args) {
int[][] matrix = {{1,2,3},{4,5,6},{7,8,9}};
//This will print you all the 36 sub-matrices of 3X3 matrix
printAllSubMatrices(matrix);
}
答案 1 :(得分:1)
这是O(n ^ 6)蛮力的问题。
int a[][]= new int [m][n];
for(int i =0 ; i<m;i++)
for(int j=0;j<n;j++)
for(int r=i;i<m;i++)
for(int c=j;c<n;c++)
for(int l1=i ;l1<r;l1++)
for(int l2=j; l2<c;l2++)
print a[l1][l2];