题目描述
原理同这篇文章https://www.acwing.com/solution/content/7674/
使用偏移量dx, dy来控制走动方向←↓→↑ 东南西北
碰壁就换向
样例
if __name__ == '__main__':
n, m = map(int, input().split())
dx = [0, 1, 0, -1]
dy = [1, 0, -1, 0] #准备两个数值表示当前行走方向 依此为 东-南-西-北-东-...(右-下-左-上-右-...)
f = [[ 0 for i in range(110)] for i in range(110)] # python下f[N][N]二维数组的写法(如果[[0]*N]*N则会分配同一个内存...改的时候每一项的第i位都会被改逻辑就错了)
x = 1 # (x,y)表示从(1,1)点开始行走 , d表示初始方向为东
y = 1
d = 0
for i in range(1, n * m + 1):
if ((x + dx[d] > n or y + dy[d] > m or y + dy[d] == 0) or (f[x + dx[d]][y + dy[d]])): #是否碰壁
#( 下移时是否碰越下界 || 右移时是否越右界 || 左移时是否越左界) || (若不改变移动方向 下一点是否已经到达过)
d = (d + 1) % 4 #碰壁后切换移动方向
f[x][y] = i #标记当前点
x += dx[d] #当前方向移动一次
y += dy[d]
for i in range(1, n+1):
for j in range(1, m+1):
print(f[i][j], end=' ')
print('')
图片来自其他题解