以3為例 可以觀察出他的移動方式是 1 轉彎 1 轉彎 2 轉彎 2 轉彎 2
| |
| |
|
| |
2
|
→
|
3
|
→
|
8
|
|
|
| | |
↑
|
|
|
|
↓
|
|
|
| | |
1
|
←
|
9
|
|
5
|
|
|
|
| |
|
|
|
|
↓
|
|
|
|
|
2
|
←
|
3
|
←
|
7
|
|
|
| | | | | | | | | |
以5為例 可以觀察出他的移動方式是 1 轉彎 1 轉彎 2 轉彎 2 轉彎 3 轉彎 3 轉彎 4 轉彎 4 轉彎 4
|
3
|
→
|
4
|
→
|
2
|
→
|
1
|
→
|
4
|
|
↑
|
|
|
|
|
|
|
|
↓
|
|
4
|
|
2
|
→
|
3
|
→
|
8
|
|
9
|
|
↑
|
|
↑
|
|
|
|
↓
|
|
↓
|
|
2
|
|
1
|
←
|
9
|
|
5
|
|
6
|
|
↑
|
|
|
|
|
|
↓
|
|
↓
|
|
4
|
←
|
2
|
←
|
3
|
←
|
7
|
|
8
|
|
|
|
|
|
|
|
|
|
↓
|
|
1
|
←
|
2
|
←
|
6
|
←
|
4
|
←
|
3
|
上述兩個例子發現到n-1 每個都執行兩次 在執行一次n-1
可以把它看成一個(x,y) 左上角是(0,0)
所以不用用4個case一個一個解 從正中間開始 用字典依序 左(x-1) 上(y-1) 右(x+1) 下(y+1) (從哪個動作開始要看第二行的輸入
以三為例 原本的1 轉彎 1 轉彎 2 轉彎 2 轉彎 2 可以改成---> x-1 轉彎 y-1 轉彎 x+1 x+1 轉彎 y+1 y+1 轉彎 x-1 x-1
以下程式碼(PYTHON)
.
.
.
.
.
.
.
.
.
.
.
.
.
xx = int(input())
move = int(input())
num = []
d = {0:[-1,0] , 1:[0,-1] , 2:[1,0] , 3:[0,1]}
for i in range(xx):
num.append(list(map(int,input().split())))
time = 1
x = int((xx-1)/2)
y = int((xx-1)/2)
print(num[y][x],end = "")
for i in range(2 * (xx-1)):
for j in range(time):
temp = d[move]
x += temp[0]
y += temp[1]
print(num[y][x],end = "")
move += 1
if i % 2 != 0:
time += 1
if move == 4:
move = 0
for i in range(xx-1):
temp = d[move]
x += temp[0]
y += temp[1]
print(num[y][x],end = "")