本文共 1425 字,大约阅读时间需要 4 分钟。
螺旋矩阵是一种填充数据的方式,从左上角开始逆时针沿着螺旋线填充数字。以下是优化后的内容,描述了如何利用while循环来实现螺旋矩阵填充,并解决可能遇到的问题。
螺旋矩阵的填充可以分为四个方向:右、下、左、上。每次填充一层螺旋,逐步向外扩展。以下是实现螺旋矩阵填充的详细步骤:
初始化变量:读取输入的行数n和列数m,初始化两个二维数组mark和arr来记录填充状态和数据。
外层循环处理横向填充:
内层循环处理纵向填充:
处理边界条件:确保在每次循环结束后,正确更新索引值,避免越界。
n, m = map(int, input().split())mark = [[False for _ in range(m)] for _ in range(n)]arr = [[0 for _ in range(m)] for _ in range(n)]i = 1x, y = 0, 0while i <= n * m: # 填充右侧 while y < m and not mark[x][y]: mark[x][y] = True arr[x][y] = i y += 1 i += 1 y -= 1 x += 1 # 填充下方 while x < n and not mark[x][y]: mark[x][y] = True arr[x][y] = i x += 1 i += 1 x -= 1 y += 1 # 填充左侧 while y >= 0 and not mark[x][y]: mark[x][y] = True arr[x][y] = i y -= 1 i += 1 y += 1 x += 1 # 填充上方 while x >= 0 and not mark[x][y]: mark[x][y] = True arr[x][y] = i x -= 1 i += 1 x += 1 y -= 1print(arr)
这种方法确保了每个位置都被正确填充,避免了传统的for循环可能带来的索引越界问题。同时,使用嵌套的while循环能够灵活处理不同方向的填充,适用于复杂的逻辑控制流。
转载地址:http://dyhr.baihongyu.com/