CCF之Z字型掃描(java)
阿新 • • 發佈:2018-12-27
試題編號: | 201412-2 |
試題名稱: | Z字形掃描 |
時間限制: | 2.0s |
記憶體限制: | 256.0MB |
問題描述: |
問題描述
在影象編碼的演算法中,需要將一個給定的方形矩陣進行Z字形掃描(Zigzag Scan)。給定一個n×n的矩陣,Z字形掃描的過程如下圖所示: 對於下面的4×4的矩陣, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 對其進行Z字形掃描後得到長度為16的序列: 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 請實現一個Z字形掃描的程式,給定一個n×n的矩陣,輸出對這個矩陣進行Z字形掃描的結果。 輸入格式 輸入的第一行包含一個整數n,表示矩陣的大小。 輸入的第二行到第n+1行每行包含n個正整數,由空格分隔,表示給定的矩陣。 輸出格式 輸出一行,包含n×n個整數,由空格分隔,表示輸入的矩陣經過Z字形掃描後的結果。 樣例輸入 4 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 樣例輸出 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 評測用例規模與約定 1≤n≤500,矩陣元素為不超過1000的正整數。 |
解題程式碼(java):
import java.util.Scanner; public class Main { public static final int RIGHT = 1; public static final int DOWN = 2; public static final int RIGHTUP = 3; public static final int LEFTDOWN = 4; public static int data[][]; //矩陣 public static void main(String[] args) { new Main().run(); } public static void run(){ //接收輸入 Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); data = new int[n][n]; for(int i = 0; i < n; i++){ for(int j = 0; j < n; j++){ data[i][j] = scanner.nextInt(); } } int row = 0; int col = 0; int direction =RIGHT; while (row != n - 1 || col != n - 1) { System.out.print(data[row][col]+" "); switch (direction) { case RIGHT: col++; if (row == 0) direction = LEFTDOWN; else direction = RIGHTUP; break; case RIGHTUP: row--; col++; if (row == 0 && col != n - 1) direction = RIGHT; else if (col == n - 1) direction = DOWN; else direction = RIGHTUP; break; case DOWN: row++; if (col == 0) direction = RIGHTUP; else direction = LEFTDOWN; break; case LEFTDOWN: row++; col--; if (col == 0 && row != n - 1) direction = DOWN; else if (row == n - 1) direction = RIGHT; else direction= LEFTDOWN; break; } } System.out.print(data[n-1][n-1]); } }