day03 756 蛇形矩陣(偏移量技巧)
阿新 • • 發佈:2021-02-19
756 蛇形矩陣
輸入兩個整數n
和m
,輸出一個n
行m
列的矩陣,將數字 1
到 n*m
按照回字蛇形填充至矩陣中。
具體矩陣形式可參考樣例。
輸入格式
輸入共一行,包含兩個整數n
和m
。
輸出格式
輸出滿足要求的矩陣。
矩陣佔n
行,每行包含m
個空格隔開的整數。
資料範圍
1 ≤ n , m ≤ 100 1≤n,m≤100 1≤n,m≤100
輸入樣例:
3 3
輸出樣例:
1 2 3
8 9 4
7 6 5
難度:簡單 |
---|
時/空限制:1s / 64MB |
來源:語法題 , 微軟面試題 |
演算法標籤 陣列 模擬 |
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int[] dx = {-1,0,1,0};//定義輔助改變方向的陣列,上、右、下、左
int[] dy = {0,1,0,-1};
int[][] arr = new int[n][m];
boolean [][] isVisited = new boolean[n][m];//用於標記當前位置是否走過了
int a = 0,b=0,d=1;//d = 1表示最開始是往右走的
for(int i = 1;i <= n*m;i++){//共有n*m個數,故走n*m步
arr[a][b] = i;
isVisited[a][b] = true;
int x = a + dx[d];//嘗試更新下一步要走的座標
int y = b + dy[d];
//下一步要走的座標越界或者已經有值了,說明需要拐彎了
if(x >= n || x < 0 || y >= m || y < 0 || isVisited[x][y]){
d = (d + 1) % 4;
x = a + dx[d];//更新正確的下一步要走的座標
y = b + dy[d];
}
a = x;//下一步要走的座標賦給(a,b)
b = y;
}
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}