public int count = 0; public int total = 0; public int num = 0; public int [][] args; /** * 1 2 3 4 * 12 13 14 5 * 11 16 15 6 * 10 9 8 7 * */ public Demo(int num){ args = new int [num][num]; total = num*num; process(0, 0, num, 0); }
private void process(int x, int y, int next, int times) { // x+ for (int i = next; i > 0; i--) { if(count !=0 && total == count ){ return; }
args[x][y] = ++count; if((x-times) < (next -1)){ x++; } } // y+ for (int i = next -1; i > 0; i--) { if(count !=0 && total == count ){ return; } if((y -times) < (next -1)){ y++; } args[x][y] = ++count; } // x- for (int i = next -1; i > 0; i--) { if(count !=0 && total == count ){ return; } x --; args[x][y] = ++count; } // y- for (int i = next -2; i > 0; i--) { if(count !=0 && total == count ){ return; } y --; args[x][y] = ++count; } if(count !=0 && total == count ){ return; }else{ process(x+1,y,next-2, times+1); }
} public static void main(String[] args) { new Demo(2); } }