AcWing 756. 蛇形矩阵-java
原题链接
简单
作者:
cha
,
2021-03-20 20:28:36
,
所有人可见
,
阅读 242
注意点
方向题可以定义 x y 两个数组: int[] dx = {0,1,0,-1},dy = {1,0,-1,0};方便移动到下一个位置
import java.util.*;
class Main{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
int n = in.nextInt(), m = in.nextInt();
int[][] res = new int[n][m];
//往下是x 往右是y {0,1,0,-1} {1,0,-1,0}
int[] dx = {0,1,0,-1},dy = {1,0,-1,0};
int x = 0 , y = 0 , dir = 0 ;
//定义boolean数组,表示该节点是否被走过
boolean[][] flag = new boolean[n][m];
res[0][0] = 1;
flag[0][0] = true;
for(int i = 2 ; i <= n*m ; i++){
//计算下一个节点
int nx = x + dx[dir];
int ny = y + dy[dir];
//判断是否合法 边界+是否走过
if(nx < 0 || nx > n-1 || ny < 0 || ny > m-1 || flag[nx][ny] == true){
//右旋90°,找下一个方向
dir = (dir+1)%4;
}
//计算可行的下一个节点
x = x + dx[dir];
y = y + dy[dir];
res[x][y] = i ;
flag[x][y] = true;
}
//输出
for(int i = 0 ; i < n ; i++){
for(int j = 0 ; j < m ; j++){
System.out.print(res[i][j]+" ");
}
System.out.print("\n");
}
}
}