输入两个整数 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
实现代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<vector<int>> matrix(n, vector<int>(m));
int num = 1;
int rowStart = 0, rowEnd = n - 1;
int colStart = 0, colEnd = m - 1;
while (num <= n * m) {
// 向右填充
for (int i = colStart; i <= colEnd; ++i)
matrix[rowStart][i] = num++;
++rowStart;
// 向下填充
for (int i = rowStart; i <= rowEnd; ++i)
matrix[i][colEnd] = num++;
--colEnd;
// 向左填充
if (rowStart <= rowEnd) {
for (int i = colEnd; i >= colStart; --i)
matrix[rowEnd][i] = num++;
--rowEnd;
}
// 向上填充
if (colStart <= colEnd) {
for (int i = rowEnd; i >= rowStart; --i)
matrix[i][colStart] = num++;
++colStart;
}
}
// 输出矩阵
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
system("pause");
return 0;
}