https://www.acmicpc.net/problem/2178

import sys
import collections


def Print(lst):
    for i in lst:
        for j in i:
            print(j, end=' ')
        print("")
    print("")


def bfs(i, j):
    visited = [[0 for _ in range(m)] for _ in range(n)]
    x = [0, 0, 1, -1]
    y = [1, -1, 0, 0]

    queue = collections.deque([[i, j, 1]])
    visited[i][j] = 1
    while queue:
        r, c, depth = queue.popleft()
        for dir in range(4):
            nR = r + x[dir]
            nC = c + y[dir]
            if 0 <= nR < n and 0 <= nC < m:
                if nR == n-1 and nC == m-1:
                    return depth+1
                if board[nR][nC] == 1 and not visited[nR][nC]:
                    visited[nR][nC] = 1
                    queue.append([nR, nC, depth+1])

        # Print(visited)


if __name__ == '__main__':
    n, m = map(int, sys.stdin.readline().split())
    board = [[0 for _ in range(m)] for _ in range(n)]
    for i in range(n):
        tmp = sys.stdin.readline()[:-1]
        for j in range(m):
            board[i][j] = int(tmp[j])

    #Print(board)
    print(bfs(0, 0))

'알고리즘 > BFS와 DFS' 카테고리의 다른 글

14501번. 퇴사  (0) 2020.04.17
16236번. 아기 상어  (0) 2020.04.13
13460번. 구슬 탈출 2  (0) 2019.12.31
2468번. 안전 영역  (0) 2019.12.30
11724번. 연결 요소의 개수  (0) 2019.12.24

+ Recent posts