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

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

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

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

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

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

三、代码实现:

importjava.util.Scanner;public classsnake_arr {public static voidmain(String[] args){
Scanner sc
=newScanner(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(intval:row){
System.out.printf(
"%d ",val);
}
System.out.println();
}
}
}

标签: none

添加新评论