티스토리 뷰

반응형

문제

 

2178번: 미로 탐색

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

www.acmicpc.net

 

풀이

bfs의 기본이 되는 문제. 

새로 추가된 애(maze[i][j]로부터 파생된 애)의 자리에 기존(maze[i][j]) + 1을 해주는것이 가장 중요하다. 

import sys
from collections import deque

# N * M 미로 
N, M = map(int, sys.stdin.readline().split(" "))
maze = []

for _ in range(N):
    maze.append(list(map(int, sys.stdin.readline().strip())))

dr = [-1, 1, 0, 0]
dc = [0, 0, -1, 1]

# 시작점 
queue = deque()
queue.append([0, 0])

# bfs
while queue:
    i, j = queue.popleft()

    for k in range(4):
        ndr = i + dr[k]
        ndc = j + dc[k]

        if 0 <= ndr < N and 0 <= ndc < M and maze[ndr][ndc] == 1 and not (ndr == 0 and ndc == 0):
            queue.append([ndr, ndc])
            maze[ndr][ndc] = maze[i][j] + 1

            if ndr == N-1 and ndc == M-1:
                print(maze[ndr][ndc])
                break

반응형