螺旋矩陣


/**
* 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
*/
public static void print(int n){

int[][] xy = new int[n][n];
int circle = n / 2;//圈數
int x = 0;
int y = 0;
int start = 0;
for(int i = 0; i < circle; i++){
int step = n - i*2;//步數
//左
for(int k = 0; k < step;k++){
xy[x][y] = ++start;
if(k < step -1){
++y;
}
}

//下右都是一樣的步數
step = step - 1;

//橫座標向右移一位
++x;
//下
for(int k = 0; k < step; k++){
xy[x][y] = ++start;
if(k < step - 1){
++x;
}
}

//縱座標向上移一位
--y;
//右
for(int k = step; k > 0; k--){
xy[x][y] = ++start;
if(k != 1){
--y;
}
}

//橫座標向左移一位
--x;
//上
step = step - 1;
for(int k = step; k > 0; k--){
xy[x][y] = ++start;
if(k != 1){
--x;
}
}
//移位到下一圈
++y;
}

if(n % 2 > 0){
xy[x][y] = ++start;
}

for(int i = 0; i < xy.length; i++){
for(int j = 0; j < xy.length; j++){
System.out.printf("%02d ",xy[j][i]);
}
System.out.println("");
}
}

public static void main(String[] args) {
Test2.print(5);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章