1210 - Ladder1


問題の説明
リンク
問題を解く
各位置は方向とインデックスを考慮するため,再帰関数で表す.
  • の下部にある2つの要素のインデックスを探します.
  • インデックスから、再帰関数を使用して下から上へ.
  • の方向は方向=0、左方向は方向=1、右方向は方向=1とする.
  • の上向きの方向であれば、インデックスが左側または右側に存在するかどうかを確認し、存在する場合は、パスがあるかどうかを確認します.
  • の左または右方向の場合は、上にインデックスがあるかどうかを確認し、ある場合は長さがあるかどうかを確認します.
  • の最上位に達すると、値が返されます.
  • これは個人的には難しいと思いますが、喜んでいる問題の一つです.
    コード#コード#
    def move(x, y, direction, arr):
        if direction == 0:
            if y+1 <= 99 and arr[x][y+1] == 1:
                return move(x, y+1, 1, arr)
            if y - 1 >= 0 and arr[x][y - 1] == 1:
                return move(x, y - 1, -1, arr)
            if x-1 >= 0 and arr[x-1][y] == 1:
                return move(x-1, y, 0, arr)
            if x == 0:
                return y
        if direction == 1:
            if x-1 >= 0 and arr[x-1][y] == 1:
                return move(x-1, y, 0, arr)
            if y+1 <= 99 and arr[x][y+1] == 1:
                return move(x, y+1, 1, arr)
        if direction == -1:
            if x-1 >= 0 and arr[x-1][y] == 1:
                return move(x-1, y, 0, arr)
            if y - 1 >= 0 and arr[x][y - 1] == 1:
                return move(x, y - 1, -1, arr)
    
    for T in range(10):
        tc = int(input())
        arr = [list(map(int, input().split())) for _ in range(100)]
        for i in range(100):
            if arr[99][i] == 2:
                print(f'#{tc} {move(99, i, 0, arr)}')
                break