Python如何实现N阶方阵的顺时针螺旋填充与打印?现有代码优化求助
顺时针螺旋填充N阶方阵实现方案
核心实现逻辑
螺旋填充的核心是通过边界控制遍历方向,不需要复杂的坐标计算,步骤如下:
- 初始化四个边界值:上边界
top默认值为0,下边界bottom默认值为n-1,左边界left默认值为0,右边界right默认值为n-1 - 初始化当前待填充数值为1,填充最大值为n*n
- 按照「从左到右→从上到下→从右到左→从下到上」的顺序循环遍历,每完成一个方向的遍历就收缩对应边界,直到所有数值填充完成:
- 先遍历上边界所在的整行,填充完成后上边界向下移动1位,若上边界超过下边界则直接结束循环
- 再遍历右边界所在的整列,填充完成后右边界向左移动1位,若左边界超过右边界则直接结束循环
- 再遍历下边界所在的整行,填充完成后下边界向上移动1位,若上边界超过下边界则直接结束循环
- 最后遍历左边界所在的整列,填充完成后左边界向右移动1位,若左边界超过右边界则直接结束循环
适配现有代码的修改版本
你只需要修改llenar_matriz函数的逻辑,同时调整主程序的赋值即可,完整可运行代码如下:
def llenar_matriz(n): # 初始化n阶空矩阵 matriz = [] for r in range(n): fila = [] for c in range(n): fila.append(0) matriz.append(fila) # 定义四个边界 top = 0 bottom = n - 1 left = 0 right = n - 1 current_num = 1 max_num = n * n while current_num <= max_num: # 上边界从左到右填充 for c in range(left, right + 1): matriz[top][c] = current_num current_num += 1 top += 1 if top > bottom: break # 右边界从上到下填充 for r in range(top, bottom + 1): matriz[r][right] = current_num current_num += 1 right -= 1 if left > right: break # 下边界从右到左填充 for c in range(right, left - 1, -1): matriz[bottom][c] = current_num current_num += 1 bottom -= 1 if top > bottom: break # 左边界从下到上填充 for r in range(bottom, top - 1, -1): matriz[r][left] = current_num current_num += 1 left += 1 if left > right: break return matriz def imprimir_matriz(matriz): # 打印矩阵 filas = len(matriz) columnas = len(matriz[0]) for f in range(filas): for c in range(columnas): print("%3d" % matriz[f][c], end="") print() # 主程序 lado = int(input("Ingrese el tamaño de la matriz: ")) while lado < 1: print("Tamaño inválido. Debe ser mayor que 0") lado = int(input("Ingrese el tamaño de la matriz: ")) matriz = llenar_matriz(lado) imprimir_matriz(matriz)
输入4运行后,即可得到你给出的示例输出效果。
二维数组相关练习建议
你可以尝试以下衍生需求巩固二维数组操作能力:
- 实现逆时针螺旋填充矩阵
- 实现从矩阵中心向外的螺旋填充
- 实现非方阵(M行N列)的螺旋填充
- 练习矩阵转置、矩阵按角度旋转、对角线遍历、蛇形遍历等常见操作
内容的提问来源于stack exchange,提问作者Gibbon
相关产品推荐
相关产品推荐

