import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 /** 分析过程 1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16 0, 1 1, 0 2, 0 1, 1 0, 2 0, 3 1, 2 2, 1 3, 0 3, 1 2, 2 1, 3 2, 3 3, 2 3, 3 1 2 6 3 5 7 4 8 9 0,0 0,1 1,0 2,0 1,1 0,2 1,2 2,1 2,2 */ int n = in.nextInt(); int martix[][] = new int[n][n]; int step = n * n; int row = 0, col = 0; int isLeftDown = -1; // 移动方向(左下或右上),-1为两则都不 for (int i = 1; i <= step; i++) { martix[row][col] = i; if (isLeftDown == 0) { // 左下移动 col -= 1; row += 1; // 要向下移动或向右移动了 if (row == 0 || col == 0 || row + 1 == n || col + 1 == n) isLeftDown = -1; } else if (isLeftDown == 1) { // 右上移动 row -= 1; col += 1; // 要向下移动或向右移动了 if (row == 0 || col == 0 || row + 1 == n || col + 1 == n) isLeftDown = -1; } else if (row == 0) { // 往左下移动 // 向右移动一步 if (col + 1 != n) { col += 1; } else { row += 1; } isLeftDown = 0; } else if (col == 0) { // 往右上移动 isLeftDown = 1; if (row + 1 != n) { // 向下移动一步 row += 1; } else { // 向右移动一步 col += 1; } } else if (row + 1 == n) { // 向右移动一步,然后往右上移动 col += 1; isLeftDown = 1; } else if (col + 1 == n) { // 向下移动一步,然后往左下移动 row += 1; isLeftDown = 0; } } for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { System.out.print(martix[i][j] + " "); } System.out.println(); } } }