输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数n和m。
输出格式
输出满足要求的矩阵。
矩阵占n行,每行包含m个空格隔开的整数。
数据范围
1≤n,m≤100
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
代码解读:
到达边界后,说明要换方向了,我们用:
d = (d + 1) % 4;
可以巧妙的让方向向量旋转90°
代码如下:
#include <iostream>
using namespace std;
const int N = 30;
int a[N][N];int dx[] = {1, 0, -1, 0}, dy[] = {0, -1, 0, 1};int main() {int n;cin >> n;int x = 0, y = n - 1, d = 0;for (int i = 1; i <= n * n; i++) {a[x][y] = i;int xx = x + dx[d], yy = y + dy[d];if (xx < 0 || xx >= n || yy < 0 || yy >= n || a[xx][yy]) {d = (d + 1) % 4;xx = x + dx[d], yy = y + dy[d];}x = xx, y = yy;}for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {cout << a[i][j] << " ";}cout << endl;}return 0;
}