首页 > 代码库 > 蛇形填数

蛇形填数

问题描述:

在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  

 

蛇形填数