形如
1 | 3 | 4 | 10 |
2 | 5 | 9 | 11 |
6 | 8 | 12 | 15 |
7 | 13 | 14 | 16 |
的数组称谓Z形二维数组。填充这样的数组其实只要按照Z形进行行走填充即可,设置一个flag指示方向,行走的时候检测边界,遇到边界便转换方向。
const int N = 16; void fill_z_array(int A[N][N]) { for (int i = 1, x = 0, y = 0, flag = 1; i <= N * N; i++) { A[x][y] = i; if (flag) { if (y == 0) { if (x == N - 1) { y += 1; } else { x += 1; } flag = 0; } else { if (x == N - 1) { y += 1; flag = 0; } else { x += 1; y -= 1; } } } else { if (x == 0) { if (y == N - 1) { x += 1; } else { y += 1; } flag = 1; } else { if (y == N - 1) { x += 1; flag = 1; } else { x -= 1; y += 1; } } } } }