You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:39:01