代码之家  ›  专栏  ›  技术社区  ›  Megha Singh

如何在Java中打印给定2D矩阵的所有子矩阵?

  •  2
  • Megha Singh  · 技术社区  · 9 年前

    假设我有一个大小为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索引开始打印所需大小的子阵列。

    2 回复  |  直到 9 年前
        1
  •  3
  •   Assafs    9 年前

    您可以尝试以下代码:

    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);
      }
    
        2
  •  1
  •   Satyendra Ranjan    8 年前

    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];