백준 baekjoon

[백준 2178] 미로찾기

니블 2023. 5. 20. 18:41

bfs(si,sj,ei,ej)  

# q생성

# q 초기데이터 삽입 , v[si][sj] =1 

while q: 

   ci,cj = q.pop(0)  # 현재 q에 있는 (데이터) pop해줌  

4방향 , 조건 (arr ==1 , v==0) 범위내 체크

q (ni,nj) 

v[ni][nj] = v[ci][cj]+1 

 

def bfs(si, sj, ei, ej):
    q = []
    v = [[0]*M for _ in range(N)]

    q.append((si,sj))
    v[si][sj] = 1

    while q:
        ci, cj = q.pop(0)
        if (ci,cj) == (ei,ej):  # 정답 처리가 필요한 경우 이자리에서..
            return v[ei][ej]

        # 4방향, 범위내, 조건에 맞으면: arr == 1, v == 0
        for di,dj in ((-1,0), (1,0), (0,-1), (0,1)):
            ni, nj = ci+di, cj+dj
            if 0<=ni<N and 0<=nj<M and arr[ni][nj]==1 and v[ni][nj]==0:
                q.append((ni,nj))
                v[ni][nj] = v[ci][cj]+1

N, M = map(int, input().split())
arr = [list(map(int, input())) for _ in range(N)]

ans = bfs(0, 0, N-1, M-1)
print(ans)