分治算法之数字旋转方阵问题

一、矩阵形式如下:

1	16	15	14	13	
2	17	24	23	12	
3	18	25	22	11	
4	19	20	21	10	
5	6	7	8	9	
二、利用分治算法的思想,先生成矩阵的如下区域:

区域A:

1        
2        
3        
4        
         
区域B:

         
         
         
         
5 6 7 8  

区域C:

         
        12
        11
        10
        9

区域D:

  16 15 14 13
         
         
         
         
三、完整算法(generateRotate函数) 和测试程序如下:

public class RotateMatrix {
	public static int N = 5;
	int [][] result = new int[N][N];
	public static void main(String[] args) {
		RotateMatrix rm = new RotateMatrix();
		rm.generateRotate(1, 0, N);
		rm.printResult();
	}
	
	//生成旋转矩阵
	public void generateRotate(int number, int begin, int size){
		if(size == 1){
			result[begin][begin] = number;
			return;
		}
		
		if(size == 0){
			return;
		}
		//生成区域A
		int i = begin;
		int j = begin;
		for(int k = 0; k < size - 1; k++){
			result[i][j] = number;
			number++;
			i++;
		}
		
		//生成区域B
		for(int k = 0; k < size - 1; k++){
			result[i][j] = number;
			number++;
			j++;
		}
		
		//生成区域C
		for(int k = 0; k < size - 1; k++){
			result[i][j] = number;
			number++;
			i--;
		}
		
		//生成区域D
		for(int k = 0; k < size - 1; k++){
			result[i][j] = number;
			number++;
			j--;
		}
		
		//递归调用
		generateRotate(number, begin + 1, size - 2);
	}
	
	//打印结果
	public void printResult(){
		for(int i = 0; i < N; i++){
			for(int j = 0; j < N; j++){
				System.out.print(result[i][j] + "	");
				if(j == N - 1){
					System.out.println();
				}
			}
		}
	}
}

四、运行结果如下:

1	16	15	14	13	
2	17	24	23	12	
3	18	25	22	11	
4	19	20	21	10	
5	6	7	8	9




你可能感兴趣的:(分治算法之数字旋转方阵问题)