問題
N×Nの行列があり、左端上から右端下までの通路を探す。道は1壁は0で表される。また、右が下の方向にのみ進むことができる。
例
下の行列であれば、(0, 0) -> (0, 1) -> (1, 1) -> (1, 2) -> (2, 2) -> (3, 2) -> (3, 3)と進む。
$$ \left( \begin{array}{cccc} 1&1&0&0 \\ 0&1&1&0 \\ 0&0&1&0 \\ 0&0&1&1 \end{array} \right) $$
回答
def path_finder(maze, position, N):
# ゴールまでに通過した道をリストにして返す。
if position == (N-1, N-1):
return [(N-1, N-1)]
x, y = position
if x + 1 < N and maze[x+1][y] == 1:
a = path_finder(maze, (x+1, y), N)
if a is not None:
return [(x, y)] + a
if y + 1 < N and maze[x][y+1] == 1:
b = path_finder(maze, (x, y+1), N)
if b is not None:
return [(x, y)] + b
maze = [[1, 1, 0, 0],
[0, 1, 1, 0],
[0, 0, 1, 0],
[0, 0, 1, 1]]
print(path_finder(maze, (0, 0), 4))