본문 바로가기
알고리즘

백준_2178_미로 탐색

by 매화of사군자 2020. 1. 16.

https://www.acmicpc.net/problem/2178

 

2178번: 미로 탐색

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

www.acmicpc.net

해결 방법

> BFS를 활용한다.

> 미로에 최단거리의 업데이트를 하지 말고 또 다른 하나의 2차원 배열을 만들어 그곳에서 최단거리를 관리한다.

> dx = [0,0,1,-1] dy = [1,-1,0,0]을 활용하여 상하좌우를 탐색한다.

 

코드

더보기

import collections

 

y, x = map(int,input().split())

 

maze = []

queue = collections.deque([])

visited = [[0]*x for i in range(y)] #최단거리 정보 배열

 

for i in range(y):

    maze.append(input())

 

queue.append((0,0))

visited[0][0] = 1



while queue:

 

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

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

 

    t = queue.popleft()

 

    _x = t[0]

    _y = t[1]

 

    if _x == x - 1 and _y == y - 1:

        print(visited[_y][_x])

        break

 

    for i in range(4):

        nx = _x + dx[i]

        ny = _y + dy[i]

        if nx < x and nx >= 0 and ny < y and ny >= 0#index check

            if visited[ny][nx] == 0 and maze[ny][nx] == '1':

                visited[ny][nx] = visited[_y][_x] + 1

                queue.append((nx,ny))

'알고리즘' 카테고리의 다른 글

백준_4963_섬의 개수  (0) 2020.01.20
백준_1389_케빈 베이컨의 6단계 법칙  (0) 2020.01.17
백준_7576_토마토  (0) 2020.01.15
서로소 집합(disjoint set) 연습  (0) 2020.01.14
백준_15649_N과 M(1)  (0) 2020.01.13

댓글