Algorithms/Breadth First Search

[BFS 알고리즘] 미로 탐색

잉숭 2021. 8. 1. 17:43

기출: BOJ #2178

 

n, m = map(int,input().split())
visited = [[False for _ in range(m)]for __ in range(n)]
board = list()
dx,dy = [1,-1,0,0],[0,0,1,-1]

for _ in range(n):
    row = list()
    inputStr = input()
    for j in range(m):
        row.append(int(inputStr[j]))
    board.append(row)

queue = [[[0,0],1]]
visited[0][0] = True

while queue:
    cur = queue.pop(0)
    curX, curY = cur[0][0], cur[0][1]
    curVal = cur[1]
    if curX==n-1 and curY==m-1:
        print(curVal)
        break
    for dir in range(4):
        mx = curX + dx[dir]
        my = curY + dy[dir]
        if mx<0 or my<0 or mx>=n or my>=m: continue
        if visited[mx][my]: continue
        if board[mx][my]==0: continue
        visited[mx][my] = True
        queue.append([[mx,my], curVal+1])