问题描述:
在n*n方阵里填入1,2,„,n*n,要求填成蛇形。例如n=4时方阵为:
10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4
上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。
算法实现:
1 package com.ysw.test; 2 3 import java.util.Scanner; 4 5 /* 6 * 问题描述: 7 * 在n*n方阵里填入1,2,„,n*n,要求填成蛇形。例如n=4时方阵为: 8 9 10 11 12 1 10 11 9 16 13 2 12 13 8 15 14 314 15 7 6 5 4 16 17 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。n≤8。18 19 */20 21 public class snakeFilled {22 23 /**24 * @param args25 */26 public static void main(String[] args) {27 28 int n;29 // 定义坐标,随着坐标的变化不断填数,起点坐标为(x=0,y=n-1)30 // 移动的方向:下->下->..->左->左-..>上->上-..>右...31 int x, y;32 Scanner reader = new Scanner(System.in);33 n = reader.nextInt();34 int myArray[][] = new int[n][n];35 36 // 先填第一个空格,数字为137 // 填写的数字ptNum:1->n*n38 int ptNum = myArray[x = 0][y = n - 1] = 1;39 // 先判断再移动40 while (ptNum < n * n) {41 // 当向下移动时,不出现出界或者格子已经填充过数位置42 // 判断是否可以下移43 while (x + 1 < n && (myArray[x + 1][y] == 0)) {44 // 向下填充++ptNum45 myArray[++x][y] = ++ptNum;46 }47 // 当向上移动时,不出现出界或者格子已经填充过数位置48 // 判断是否可以上移49 while (x - 1 >= 0 && (myArray[x - 1][y] == 0)) {50 // 向上填充++ptNum51 myArray[--x][y] = ++ptNum;52 }53 // 当向左移动时,不出现出界或者格子已经填充过数位置54 // 判断是否可以左移55 while (y - 1 >= 0 && (myArray[x][y - 1] == 0)) {56 // 向左填充++ptNum57 myArray[x][--y] = ++ptNum;58 }59 // 当向右移动时,不出现出界或者格子已经填充过数位置60 // 判断是否可以右移61 while (y + 1 < n && (myArray[x][y + 1] == 0)) {62 // 向右填充++ptNum63 myArray[x][++y] = ++ptNum;64 }65 }66 // 格式化打印67 for (x = 0; x < n; x++) {68 for (y = 0; y < n; y++) {69 System.out.print(myArray[x][y] + " ");70 }71 System.out.println();72 }73 }74 75 }
测试输入:5
输出:
13 14 15 16 1 12 23 24 17 2 11 22 25 18 3 10 21 20 19 4 9 8 7 6 5