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])))