输入两个整数 𝑛 和 𝑚,输出一个 𝑛 行 𝑚 列的矩阵,将数字 1 到 𝑛×𝑚 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入格式
输入共一行,包含两个整数 𝑛 和 𝑚。
输出格式
输出满足要求的矩阵。
矩阵占 𝑛 行,每行包含 𝑚 个空格隔开的整数。
数据范围
1≤𝑛,𝑚≤100
输入样例:
3 3
输出样例:
1 2 3
8 9 4
7 6 5
方法:坐标偏移量
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int res[100][100];
int main()
{
int m,n;
cin >> n >> m;
int dx[] = {0,1,0,-1}, dy[] = {1,0,-1,0}; //横坐标偏移量,纵坐标偏移量
for (int x = 0, y = 0, d = 0, k = 1; k <= n * m; k++) { //坐标xy,方向d,数字k
res[x][y] = k;
int a = x + dx[d], b = y + dy[d]; //dx[d],dy[d]构成了方向偏移
if (a < 0 || a >= n || b < 0 || b >= m || res[a][b]) { //越界or重复
d = (d + 1) % 4; //切换下一个方向
a = x + dx[d], b = y + dy[d];
}
x = a, y = b; //坐标按方向移动
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cout << res[i][j] << ' ';
}
cout << endl;
}
}