🕒下午好,题主!目前:🟢[在线]
📢参考GPT-4o mini 模型、由清水白石008整理提供!
📣今日金句:“成功是一个旅程,而不是一个目的地。” — 亚瑟·阿什
构造一个蛇形方阵的思路是通过模拟填充的过程。我们可以从右上角开始,按照逆时针的方向填充数字,直到填满整个矩阵。以下是实现这个过程的步骤和代码示例。
思路
- 初始化矩阵:创建一个
n x m 的二维数组,并初始化为0。 - 定义方向:使用一个方向数组来表示逆时针的四个方向:左、下、右、上。
- 填充数字:从1开始,依次填充到
n * m,每次根据当前方向填充数字,并在填充后检查是否需要改变方向(即是否到达边界或已经填充过的单元格)。 - 输出结果:最后输出填充好的矩阵。
代码实现
以下是 C++ 的实现代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
// 初始化 n x m 的矩阵
vector<vector<int>> matrix(n, vector<int>(m, 0));
// 定义方向:左、下、右、上
int directions[4][2] = {{0, -1}, {1, 0}, {0, 1}, {-1, 0}};
int dir = 0; // 从左开始
int x = 0, y = m - 1; // 从右上角开始
for (int num = 1; num <= n * m; num++) {
matrix[x][y] = num; // 填充数字
// 计算下一个位置
int next_x = x + directions[dir][0];
int next_y = y + directions[dir][1];
// 检查下一个位置是否在边界内且未填充
if (next_x < 0 || next_x >= n || next_y < 0 || next_y >= m || matrix[next_x][next_y] != 0) {
dir = (dir + 1) % 4; // 改变方向
next_x = x + directions[dir][0];
next_y = y + directions[dir][1];
}
// 更新当前坐标
x = next_x;
y = next_y;
}
// 输出结果
for (const auto& row : matrix) {
for (int j = 0; j < m; j++) {
cout << row[j] << (j == m - 1 ? "" : " ");
}
cout << endl;
}
return 0;
}
代码解释
- 输入:读取
n 和 m。 - 矩阵初始化:使用
vector 创建一个 n x m 的矩阵,并初始化为0。 - 方向数组:定义四个方向的变化,分别对应左、下、右、上。
- 填充循环:使用一个循环从1填充到
n * m,在每次填充后检查是否需要改变方向。 - 输出:最后遍历矩阵并输出结果。
示例
对于输入 4 6,输出将会是:
6 5 4 3 2 1
7 20 19 18 17 16
8 21 22 23 24 15
9 10 11 12 13 14
这个代码实现了你所需要的蛇形方阵的构造,按照逆时针的方式填充数字。希望这能帮助你解决问题!如果有任何疑问,请随时问我。