본문 바로가기
Algorithm(CodeTree, Python)/DFS

[코드트리] 두 방향 탈출 가능 여부 판별하기 Python

by kurooru 2023. 2. 27.
# n, m 입력
n, m = map(int, input().split())
# maze
maze = [
    list(map(int, input().split()))
    for _ in range(n)
]

# in_range(x, y)
def in_range(x, y):
    return 0 <= x < n and 0 <= y < m

# can_go(x, y)
def can_go(x, y):
    # 범위 내에 있고, 방문한 적 없으며, 뱀이 아니면 가능
    return in_range(x, y) and not visited[x][y] and maze[x][y]

# dfs(x, y)
def dfs(x, y):
    # dxs, dys
    dxs, dys = [1, 0], [0, 1]
    for dx, dy in zip(dxs, dys):
        nx, ny = x + dx, y + dy
        # 갈 수 있으면
        if can_go(nx, ny):
            # 방문 처리 해주고
            visited[nx][ny] = True
            # dfs
            dfs(nx, ny)

# 설계
# visited
visited = [
    [0] * m
    for _ in range(n)
]

# 방문 표시
visited[0][0] = 1
# dfs
dfs(0, 0)

# 출력
# 마지막 칸을 방문했으면
if visited[-1][-1]:
    # 1 출력
    print(1)
# 방문 못했으면
else:
    print(0)