描述數組
給定一個h行h列的整數數組array,要求從array[0][0]元素開始,按回形從外向內順時針順序賦值整個數組。如圖所示: ![圖片描述][1] 輸出結果:4 4 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int h = scanner.nextInt();//輸入二維數組長度 int[][] arr = new int[h][h];//建立二維數組 setWay(arr,0,0);//賦值 for (int[] p : arr) {//遍歷 for (int p1 : p) { System.out.printf("%-4d",p1); } System.out.println(); } System.out.println(t); } static int p = 1;//所賦的值 static int f = 0;//控制轉向 0爲右 1爲下 2爲左 3爲上 static int t = 0;//紀錄函數調用次數 public static boolean setWay(int[][]map,int i,int j){ if(i==map.length || j ==map.length || i == -1 || j == -1){//若超出數組 f = (f+1)%4;//轉向 t++; return false; } if (map[i][j] == 0) {// 若當前點沒有走過 map[i][j] = p;//賦值 p++; while(p != map.length*map.length+1)//輸出到最後一個數跳出循環轉向 switch(f){ case 0: if (setWay(map, i, j + 1)) {//向右走 return true; } break; case 1: if (setWay(map, i+1, j )) {// 向下走 return true; } break; case 2: if (setWay(map, i , j-1)) {// 向左走 return true; } break; case 3: if (setWay(map, i-1, j)) {// 向上走 return true; } break; } } f = (f+1)%4;//循環轉向 t++; return false; }