#2178

zzwwoonn·2022년 6월 3일
0

Algorithm

목록 보기
44/71

dfs로 풀었다가 그게 최단거리 인지 보장 할 수 있나? 에서 막혀 bfs로 다시 풀었다.

from collections import deque
import sys
input = sys.stdin.readline

dx = [1, 0, -1, 0]
dy = [0, -1, 0, 1]

N, M = map(int, input().split())
# print(M)
inputMap = [ [0] * (M+1)]
# print(inputMap)
for i in range(1, N+1):
    inputMap.append([0] + list(input()))
# print(inputMap)

for i in range(1, N+1):
    for j in range(1, M+1):
        inputMap[i][j] = int(inputMap[i][j])

# print(inputMap)
def bfs(i, j):
    queue = deque()
    queue.append((i, j))

    while queue:
        row, col = queue.popleft()
        # 처음엔 1 1 이겠지

        # 현재 위치에서 4가지 방향으로 위치 확인
        for i in range(4):
            nx = col + dx[i]
            ny = row + dy[i]

            if nx < 1 or nx > M or ny < 1 or ny > N:
                continue

            if inputMap[ny][nx] == 0:
                continue
            
            if inputMap[ny][nx] == 1:
                inputMap[ny][nx] = inputMap[row][col] + 1
                queue.append((ny, nx))
    # print(inputMap)
    return inputMap[N][M]

print(bfs(1,1))

0개의 댓글