题目描述:
输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。 具体矩阵形式可参考样例。
输入格式:
输入共一行,包含两个整数n和m。
输出格式:
输出满足要求的矩阵。 矩阵占n行,每行包含m个空格隔开的整数。
数据范围:
1≤n,m≤100
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner reader = new Scanner(System.in);
int n = reader.nextInt();
int m = reader.nextInt();
int[][] q = new int[110][110];
//used数组记录是否走过
boolean[][] used = new boolean[110][110];
//dx dy记录偏移量
int[] dx={-1,0,1,0};
int[] dy = {0,1,0,-1};
//刚开始时坐标为(0,0) 方向为1
int x = 0,y=0,d =1;
for(int i = 1;i<=n*m;i++){
q[x][y] = i;
used[x][y] = true;
int a = x+dx[d],b=y+dy[d];
//越界情况
if(a<0||a>=n||b<0||b>=m||used[a][b]){
//每次撞墙后端调整
d = (d+1)%4;
//(a,b)表示沿当前格子走的下一个位置坐标
a = x+dx[d];
b=y+dy[d];
}
//更新坐标
x = a;
y=b;
}
for(int i = 0;i<n;i++){
for(int j = 0;j<m;j++){
System.out.print(q[i][j]);
System.out.print(" ");
}
System.out.print("\n");
}
}
}