Algorithm/BFS

[백준 2178번] 미로 탐색

킹우현 2023. 10. 3. 02:27

 

2178번: 미로 탐색

첫째 줄에 두 정수 N, M(2 ≤ N, M ≤ 100)이 주어진다. 다음 N개의 줄에는 M개의 정수로 미로가 주어진다. 각각의 수들은 붙어서 입력으로 주어진다.

www.acmicpc.net

from collections import deque

n,m = map(int,input().split())

maze = [list(map(int,list(input()))) for _ in range(n)]
visited = [[-1]*m for _ in range(n)]

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

def bfs():
    visited[0][0] = 1

    queue = deque([(0,0)])

    while queue:
        cur_x,cur_y = queue.popleft()

        if cur_x == n-1 and cur_y == m-1:
            return visited[cur_x][cur_y]

        for i in range(4):
            nx = cur_x + dx[i]
            ny = cur_y + dy[i]

            if 0 <= nx < n and 0 <= ny < m and visited[nx][ny] == -1 and maze[nx][ny] == 1:
                visited[nx][ny] = visited[cur_x][cur_y] + 1
                queue.append((nx,ny))
    return -1

print(bfs())

이번 문제는 (0,0)에서 (n-1,m-1)까지 이동하는 최소 거리를 구하는 문제이다.

 

BFS 알고리즘을 사용하여 최소 거리를 구하면 되는데, 칸을 셀 때 시작 위치와 도착 위치도 포함한다는 것을 조심하면 된다.

 

기본적인 BFS 예제를 통해 복습해볼 수 있던 문제였다 :)

'Algorithm > BFS' 카테고리의 다른 글

[백준 1697번] 숨바꼭질  (0) 2023.10.03
[백준 4179번] 불!  (1) 2023.10.03
[백준 1926번] 그림  (0) 2023.10.03
[프로그래머스 Lv.3] 단어 변환  (0) 2023.09.29
[SWEA 5102번] 노드의 거리  (1) 2023.09.21