使用JAVA输出蛇形矩阵

一、蛇形矩阵是什么?如下图所示:

 

二、思路解释:首先根据这个样式,我们会想到使用数组的方法进行求解。把这个放在思路放在矩阵中,我们就会想到值是连续的,我们直接修改数组的下标使得相应的值赋在指定的位置就好了。那么问题就来了,这个应该如何实现呢?首先我们仔细观察一下,就会发现:

以左上角为起点,然后向右移动,行数不变,列数+1(0,1)。下移:行数+1,列数不变(1,0)。左移:行数不变,列数-1(0,-1)。上移:行数+1,列数不变(-1,0)。

然后按照上述的步长来进行矩阵位置的确定。然后我们现在还有另外一个需要解决的问题,就是什么时候矩阵开始换方向。

我们观察一下,就会得出结论:

当我们的矩阵下一步运算会突破矩阵界限,或者下一步运算的位置已经存有值了,那么我们就应该换向。

 

三、代码实现:

import java.util.Scanner;

public class snake_arr {
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int n=sc.nextInt(),m=sc.nextInt();
        int[][] res=new int[n][m];
        int[] dx={-1,0,1,0},dy={0,1,0,-1};
        int x=0,y=0,d=1;
        for(int i=1;i<=n*m;i++){
            res[x][y]=i;
            int a=x+dx[d],b=y+dy[d];
            if(a<0||a>=n||b<=0||b>=m||res[a][b]>0){
                d=(d+1)%4;
                a=x+dx[d];
                b=y+dy[d];
            }
            x=a;
            y=b;
        }
        for(int[] row:res){
            for(int val:row){
                System.out.printf("%d ",val);
            }
            System.out.println();
        }
    }
}

 

posted @ 2022-11-06 20:25  Tomhard  阅读(558)  评论(0)    收藏  举报