1. 程式人生 > 其它 >day03 756 蛇形矩陣(偏移量技巧)

day03 756 蛇形矩陣(偏移量技巧)

技術標籤:演算法刷題java演算法

756 蛇形矩陣

輸入兩個整數nm,輸出一個nm列的矩陣,將數字 1n*m按照回字蛇形填充至矩陣中。

具體矩陣形式可參考樣例。

輸入格式

輸入共一行,包含兩個整數nm

輸出格式

輸出滿足要求的矩陣。

矩陣佔n行,每行包含m個空格隔開的整數。

資料範圍

1 ≤ n , m ≤ 100 1≤n,m≤100 1n,m100

輸入樣例:

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(); } } }

在這裡插入圖片描述