时间限制: 3000 ms | 内存限制: 65535 KB
难度: 3
- 描述
- 在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的值。(n<=100)
-
输出
-
输出结果是蛇形方陈。
-
样例输入
-
3
- 样例输出
-
7 8 1
6 9 2
5 4 3
算法:
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
// 获取输入
Scanner input=new Scanner(System.in);
int N=input.nextInt();
//定义四个方向,分别为 右、下、左、上
int[][] direction={{0,1},{1,0},{0,-1},{-1,0}};
//定义一个矩阵,用于存储
int[][] matrix=new int[N][N];
//x,y分别代表了矩阵中的行和列
int x=0,y=N-1;
//d用于转换方向,一共四个方向, 0,1,2,3代表四个方向, 0代表向右 :x,y{0,1} 1代表向下:x,y{1,0} 2代表向左 :x,y{0,-1} 3代表向上:x,y{-1,0}
int d=1;
for(int i=0; i<N*N; i++)
{
//正常情况一直累加
matrix[x][y]=i+1;
x+=direction[d][0];
y+=direction[d][1];
// x>=0 x<N y>=0 y<N 用于保证矩阵的元素必须在矩阵内 , matrix用于保证 设置过矩阵位置的元素不被覆盖掉
if(!(x>=0 && x<N && y>=0 && y<N) || matrix[x][y]!=0)
{
//如果以上情况不满足,证明x 和 y 的值需要撤销掉,
x-=direction[d][0];
y-=direction[d][1];
++d;
//四个方向 0 1 2 3
d%=4;
//重新调整后的方向
x+=direction[d][0];
y+=direction[d][1];
}
}
//输出矩阵的内容
for(int[] o:matrix)
{
for(int i:o)
System.out.print(i+" ");
System.out.println();
}
}
}