題目
用zigzag的方式打印矩陣, 比如如下的矩陣
0 1 2 3
4 5 6 7
8 9 10 11
打印順序爲: 0 1 4 8 5 2 3 6 9 10 7 11
實現
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int m = in.nextInt();
int[][] arr = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
arr[i][j] = in.nextInt();
}
}
f(arr);
}
//兩個點,a和b,剛開始,a往下走,b往右走,最後a右走,b往下走,到最後位置
//一個變量控制從下往上打印,還是從上往下打印
public static void f(int[][] m) {
int ah = 0;
int al = 0;
int bh = 0;
int bl = 0;
boolean downUp = true;
int row = m.length;
int col = m[0].length;
while (al != col && bh != row) {
printEdge(m, ah, al, bh, bl, downUp);
al = ah == row - 1 ? al + 1 : al;
ah = ah == row - 1 ? ah : ah + 1;
bh = bl == col - 1 ? bh + 1 : bh;
bl = bl == col - 1 ? bl : bl + 1;
downUp = !downUp;
}
}
public static void printEdge(int[][] m, int ah, int al, int bh, int bl, boolean downUp) {
//從下往上打印,對於a點來說,a點的行數ah在不斷你的變化
if (downUp) {
while (ah != bh - 1) {
System.out.print(m[ah--][al++] + " ");
}
} else { //從上往下打印,對於b點來說,b的行在不斷的增加,列在不斷的減小
while (bh != ah + 1) {
System.out.print(m[bh++][bl--] + " ");
}
}
}
}