螺旋填充方阵
【问题】用1… n 2 n^2 n2的自然数顺时针方向螺旋填充一个n阶方阵。
当 n = 7 的时候,如下:
先做一个空的二维数组代表方阵。
始终记录当前的位置,当前填充的数字,当前的填充方向。
当遇到阻力(出界或者撞上了已填的数字)以后,改变填充的方向。
from collections import namedtuple
Posi = namedtuple('Posi', 'row col') # 位置包含行号和列号
Dire = namedtuple('Dire', 'dr dc') # 移动方向包含行的变化、列的变化
def next_dire(x):
return {
Dire(0,1): Dire(1,0),
Dire(1,0): Dire(0,-1),
Dire(0,-1): Dire(-1,0),
Dire(-1,0): Dire(0,1)
}[x]
def next_posi(p, d):
return Posi(p.row + d.dr, p.col + d.dc)