圖解:輸入任意一個數值,列印一個螺旋矩陣(二維陣列)
阿新 • • 發佈:2018-11-14
更多演算法題請看本人部落格分類--演算法
public class Demo11 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(true){ int n = sc.nextInt(); if(n == -1){ break; } //建立n行 n列的二維陣列 int[][] arr = new int[n][n]; //初始化座標 int i =0; int j =0; //初始化方向 /* * 0:從左至右 * 1: 從上至下 * 2:從右至左 * 3:從下至上 * */ int direction = 0; arr[i][j] = 1; //賦值的整個過程 for(int step = 2;step<=n*n;step++){ if(direction ==0){ //向右賦值 i不變,j+1 //已經到了右邊界 或者 右邊的值已經賦過了 if((j == n-1)||arr[i][j+1]!=0){ //不允許賦值的,改變賦值的方向 direction = 1; //因為沒有賦值成功,不允許step加 step --; }else{ //可以賦值 j++; arr[i][j] = step; } continue; } //從上至下 if(direction ==1){ //向下賦值 i+1,j不變 if(i == n-1 || arr[i+1][j]!=0){ direction = 2; step--; }else{ i++; arr[i][j] = step; } continue; } //從右至左 if(direction ==2){ //向左賦值 i不變,j-1 if(j==0 || arr[i][j-1] !=0){ direction = 3; step--; }else{ j--; arr[i][j]=step; } continue; } //從下至上 if(direction == 3){ //向上賦值 i-1,j 不變 if(i ==0 || arr[i-1][j] !=0){ direction = 0; step--; }else{ i--; arr[i][j] = step; } continue; } } for(i = 0;i<n;i++){ for(j =0;j<n;j++){ System.out.print(arr[i][j]+"\t"); } System.out.println(""); } } } }