Algorithm/BFS

[SWEA 5105번] 미로의 거리

킹우현 2023. 9. 21. 00:01

from collections import deque

t= int(input())

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

answer = []

for _ in range(t):

    n = int(input())

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

    for i in range(n):
        for j in range(n):
            if maze[i][j] == 2:
                start_x, start_y = i, j

    def bfs(x,y):
        visited[x][y] = -1

        queue = deque([(x,y)])

        while queue:
            cur_x, cur_y = queue.popleft()
            
            for i in range(4):
                nx = cur_x + dx[i]
                ny = cur_y + dy[i]

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

        return 0
    
    answer.append(bfs(start_x,start_y))

for i,value in enumerate(answer):
    print(f"#{i+1} {value}")

이번 문제는 주어진 미로에서 2가 저장된 좌표에서 3가 저장된 좌표까지 도착할 때 거쳐야 하는 칸 수를 구하는 문제이다.

 

BFS를 사용하여 풀 수 있는 간단한 문제이다 :)

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

[프로그래머스 Lv.3] 단어 변환  (0) 2023.09.29
[SWEA 5102번] 노드의 거리  (1) 2023.09.21
[백준 1525번] 퍼즐  (0) 2023.08.12
[백준 16234번] 인구 이동  (0) 2023.08.07
[백준 2206번] 벽 부수고 이동하기  (0) 2023.08.04