Skip to content

M18106: 螺旋矩阵

matrices, http://cs101.openjudge.cn/pctbook/M18106

给定一个n(1<=n<=20),生成一个n*n的二维数组,并用1到n^2对该数组用螺旋顺序进行填充。 如给定n=3时,生成的数组如下: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]

输入

一行n

输出

n行,每行n个元素,并用空格将数组元素隔开。

样例输入

3

样例输出

1 2 3
8 9 4
7 6 5

来源:cs101-2016 期末机考备选

思路:就是走到四个边,就转90度。

先定义方向,然后一直向前走,如果撞边(如果下一个位置不为0,代表撞边),就转向。

python
n = int(input())
s = [[401]*(n+2)]
mx = s + [[401] + [0]*n + [401] for _ in range(n)] + s 

dirL = [[0,1], [1,0], [0,-1], [-1,0]]

row = 1
col = 1
N = 0
drow, dcol = dirL[0]

for j in range(1, n*n+1):
    mx[row][col] = j
    if mx[row+drow][col+dcol]:
        N += 1
        drow, dcol = dirL[N%4]
    
    row += drow
    col += dcol

for i in range(1, n+1):
    print(' '.join(map(str, mx[i][1:-1])))