【Algorithm】算法设计与分析(第二版)- 王红梅 - JAVA实现:分治法-数字旋转矩阵

    科技2026-02-18  11

     输出N*Nd 数字旋转矩阵,N大于0小于等于10

    这是书上的例子,利用的是递归思想,从外层向里层填数。在这个填数矩阵中, 每一层填数的过程是类似的,那么可以递归的处理。在每一层中,分别由东南西北四个面,如果仔细看的话,行列都减去一个数,这样每次填数个数在每一层是相同的,然后在解决层数深入,即size的变化,从外往里逐渐减少。

    package fourthChapter; public class DigitalRotationMatrix { public int data[][] = new int[6][6]; public void Full(int number, int begin, int size) { int i, j; if(size == 0) return; if (size == 1) { data[begin][begin] = number; return; } i = begin; j = begin; for (int k = 0; k < size - 1; k++) { data[i][j] = number; number++; i++; } for (int k = 0; k < size - 1; k++) { data[i][j] = number; number++; j++; } for (int k = 0; k < size - 1; k++) { data[i][j] = number; number++; i--; } for (int k = 0; k < size - 1; k++) { data[i][j] = number; number++; j--; } Full(number, begin+1, size-2); } public static void main(String[] args) { DigitalRotationMatrix matrix = new DigitalRotationMatrix(); matrix.Full(1, 0, 6); for (int i = 0; i < 6; i++) { for (int j = 0; j < 6; j++) { System.out.printf("%2d ", matrix.data[i][j]); } System.out.println(); } } }

    Processed: 0.020, SQL: 9