[BFS][최단거리 구하기] - 미로의 최단거리 통로

yeom yaloo·2022년 7월 30일
0

codingtest

목록 보기
3/4

문제

  • 해당 그래프 0은 갈 수 있는 길 1은 벽이라 했을 때 2차원 리스트의 마지막 지점에 도착하는 최소 거리는 몇일까?
  • 해당 그래프의 최단 거리는 12이다.

문제 풀이

from collections import deque

dx = [0,0,-1,1]
dy = [1,-1,0,0]
board = [list(map(int,input().split())) for _ in range(7)]
dist = [[0] * 7 for _ in range(7)]
q = deque()
q.append((0,0))
board[0][0] = 1

while q:
    now = q.popleft()
    for i in range(4):
        nx = now[0] + dx[i]
        ny = now[1] + dy[i]
        if 0<=nx<7 and 0<=ny<7 and board[nx][ny] == 0:
            dist[nx][ny] = dist[now[0]][now[1]] + 1
            board[nx][ny] = 1
            q.append((nx,ny))

if dist[6][6] == 0:
    print(-1)
else:
    print(dist[6][6])
  • 전형적인 BFS로 최단거리 구하는 문제이다.
  • 상하좌우로 움직여서 갈 수 있기 때문에 상하좌우를 확인한다.
  • 이때 조건은 해당 리스트의 범위를 넘어가지 않아야 하고 이미 방문했던 곳이 아니어야 한다.
  • 방문을 했다는 표시로 해당 리스트를 1로 만들어 다시 접근을 하지 못하게 해주었다.
  • 해당 문제는 도착지점이 없이 마지막 지점을 도착지점으로 하기 때문에 중간에 종료 조건을 넣어주지 않았다.
profile
즐겁고 괴로운 개발😎

0개의 댓글