1. 螺旋方阵问题解析
这道PTA实验题要求我们生成一个n×n的螺旋方阵。所谓螺旋方阵,就是数字从外向内顺时针螺旋排列的矩阵。比如5×5的螺旋方阵如下:
code复制1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 解题思路分析
2.1 问题拆解
解决这个问题需要明确几个关键点:
- 数字填充方向:右→下→左→上循环
- 边界处理:每次完成一个方向的填充后,边界会缩小
- 终止条件:当填充的数字达到n²时结束
2.2 算法选择
常见的实现方法有:
- 模拟法:按照实际螺旋路径模拟填充过程
- 数学法:通过数学计算直接确定每个位置的数字
- 递归法:将大矩阵分解为小矩阵递归处理
对于初学者来说,模拟法是最直观易懂的。
3. 模拟法实现详解
3.1 变量定义
我们需要定义以下变量:
- 矩阵边界:left, right, top, bottom
- 当前填充位置:(x, y)
- 当前填充数字:从1开始
- 填充方向:direction (0-右,1-下,2-左,3-上)
3.2 核心算法步骤
python复制def generate_spiral_matrix(n):
matrix = [[0]*n for _ in range(n)]
left, right, top, bottom = 0, n-1, 0, n-1
num = 1
while left <= right and top <= bottom:
# 从左到右填充上边
for i in range(left, right+1):
matrix[top][i] = num
num += 1
top += 1
# 从上到下填充右边
for i in range(top, bottom+1):
matrix[i][right] = num
num += 1
right -=
