for n in [1,3,5,7]:
# 初始化矩陣
d = [[0] * n for i in range(n)]
dr = [[0, 1], [1, 0], [0, -1], [-1, 0]] # 右、下、左、上四個方向
# 起始值與起始位置
k = 1
r, c = n//2, n//2 # 中心位置
d[r][c] = k # 中心點
k += 1
# 螺旋控制變數
di = 0 # 當前方向索引
g = 1 # 當前移動步數
# 填滿矩陣
while k <= n**2: # 填滿到25為止
for _ in range(2): # 每個步數需要走兩次(右下、左上)
for _ in range(g): # 走當前步數
# 更新位置
r, c = r + dr[di][0], c + dr[di][1]
d[r][c] = k
k += 1
if k > n**2:
break # 如果已填滿,跳出迴圈
di = (di + 1) % 4 # 更新方向
if k > n**2:
break # 如果已填滿,跳出迴圈
g += 1 # 增加步數
# 輸出結果
for i in d:
for j in i:
print(f'{j:>4}', end='')
print()
print()
# 執行結果
# 1
# 7 8 9
# 6 1 2
# 5 4 3
# 21 22 23 24 25
# 20 7 8 9 10
# 19 6 1 2 11
# 18 5 4 3 12
# 17 16 15 14 13
# 43 44 45 46 47 48 49
# 42 21 22 23 24 25 26
# 41 20 7 8 9 10 27
# 40 19 6 1 2 11 28
# 39 18 5 4 3 12 29
# 38 17 16 15 14 13 30
# 37 36 35 34 33 32 31
沒有留言:
張貼留言