蛇形填数

蛇形填数

时间限制: 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();  
	        }  
	    }  

}
        


你可能感兴趣的:(蛇形填数)