给你两个整数 n,m,请你构造一个 n 行 m 列的蛇形方阵,在这个方阵中,数字由 1 到 n×m,从最右上角开始,呈环状(逆时针)向内填充,例如 n=3,m=3 的时候,蛇形方阵如下: 3 2 1 4 9 8 5 6 7 输入格式 第一行包含两个整数 n,m。 输出格式 一共 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 数据规模 对于 100% 的数据,保证 1≤n,m≤100。
时间: 2024-04-14 07:30:20 浏览: 24
可以使用以下方式构造蛇形方阵:
1. 创建一个 n 行 m 列的二维数组(方阵)。
2. 定义四个变量:rowStart、rowEnd、colStart 和 colEnd,分别表示当前填充的行范围和列范围的起始和结束位置。
3. 定义一个变量 num,初始值为 n * m,表示当前要填充的数字。
4. 使用一个 while 循环,当 num 大于等于 1 时执行循环。
5. 在循环中,先从右上角开始,从右到左填充一行,然后将 rowStart 加 1。
6. 接着从右上角开始,从上到下填充一列,然后将 colEnd 减 1。
7. 再从左下角开始,从左到右填充一行,然后将 rowEnd 减 1。
8. 最后从左下角开始,从下到上填充一列,然后将 colStart 加 1。
9. 每次填充数字后,将 num 减 1。
10. 循环结束后,输出二维数组即为所求的蛇形方阵。
以下是实现该算法的 Python 代码:
```python
def snakeMatrix(n, m):
# 创建 n 行 m 列的二维数组
matrix = [[0] * m for _ in range(n)]
rowStart, rowEnd = 0, n - 1
colStart, colEnd = m - 1, 0
num = n * m
while num >= 1:
# 从右上角开始,从右到左填充一行
for col in range(colEnd, colStart + 1):
matrix[rowStart][col] = num
num -= 1
rowStart += 1
# 从右上角开始,从上到下填充一列
for row in range(rowStart, rowEnd + 1):
matrix[row][colStart] = num
num -= 1
colStart -= 1
# 从左下角开始,从左到右填充一行
for col in range(colStart, colEnd - 1, -1):
matrix[rowEnd][col] = num
num -= 1
rowEnd -= 1
# 从左下角开始,从下到上填充一列
for row in range(rowEnd, rowStart - 1, -1):
matrix[row][colEnd] = num
num -= 1
colEnd += 1
return matrix
n, m = map(int, input().split())
matrix = snakeMatrix(n, m)
for row in matrix:
print(' '.join(map(str, row)))
```
输入示例:
```
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
```