蛇形填数(递归no.7)

来源:JK老班

题目:在n*n方阵里填入1,2,3,…,n*n,要求填成蛇形。例如n=4时方阵为:

    10 11 12  1

     9  16 13  2

     8  15 14  3

     7    6   5  4

    上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出,n<=8。

输入:一个整数n,n≤8。

输出: n行,每行n个整数,用空格分隔。

样例输入

扫描二维码关注公众号,回复: 5695639 查看本文章
4

样例输出

10 11 12 1
9 16 13 2
8 15 14 3
7 6 5 4


import java.util.Scanner;
//蛇形填数
public class P1469 {
    int n;
    int[][] A;
    int num;//当前填的数字
    
    public P1469() {
        Scanner sc=new Scanner(System.in);
        n=sc.nextInt();
        A=new int[n][n];
        num=1;//从1开始填
        Search(0,n-1,n-1);//坐标,坐标,边长
        
        //输出
        for(int x=0;x<n;x++) {
            for(int y:A[x]) System.out.print(y+" ");
            System.out.println();
//            for(int y=0;y<n;y++) {
//                System.out.print(A[x][y]+" ");
//            }
//            System.out.println();
        }
    }
    
    void Search(int x,int y,int len) {
        if(len<0) return;//小于0什么都不做
        if(len==0) {//等于0直接赋值
            A[x][y]=num;
            return;
        }
        
        int i=x,j=y;//记住当前传进来的起点
        for(int k=0;k<len;k++) {//向下填
            A[i][j]=num;
            num++;
            i++;
        }
        
        for(int k=0;k<len;k++) {//向左填
            A[i][j]=num;
            num++;
            j--;
        }
        
        for(int k=0;k<len;k++) {//向上填
            A[i][j]=num;
            num++;
            i--;
        }
        
        for(int k=0;k<len;k++) {//向右填
            A[i][j]=num;
            num++;
            j++;
        }
        Search(x+1,y-1,len-2);
    }
    
    public static void main(String[] args) {
        P1469 p=new P1469();
    }

}
 

猜你喜欢

转载自blog.csdn.net/llllll_____/article/details/88869897