티스토리 뷰

Python/이코테

5-4. 미로 탈출

JH_ 2022. 6. 26. 21:54
from collections import deque

n, m = map(int, input().split())
maze = []
for i in range(n):
    maze.append(list(map(int, input())))

dx = [-1, 1, 0, 0]  # 상하
dy = [0, 0, -1, 1]  # 좌우


def bfs(x, y):  # 넓이 우선 탐색
    queue = deque()  # 리스트 생성
    queue.append((x, y))

    while queue:
        x, y = queue.popleft()

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

            if nx < 0 or ny < 0 or nx >= n or ny >= m:
                continue

            if maze[nx][ny] == 0:
                continue

            if maze[nx][ny] == 1:
                maze[nx][ny] = maze[x][y]+1  # 하나씩 증가하여 마지막 위치의 값이 움직인 값이 됨
                queue.append((nx, ny))  # 좌표 추가 - 삭제 반복

    return maze[n-1][m-1]  # 마지막 위치 반환


print(bfs(0, 0))  # 처음 위치

'Python > 이코테' 카테고리의 다른 글

6-3.성적이 낮은 순서로 학생 출력하기  (0) 2022.06.29
6-2. 위에서 아래로  (0) 2022.06.28
5-3. 음료수 얼려 먹기  (0) 2022.06.26
5-2. 탐색 알고리즘 DFS/BFS  (0) 2022.06.24
5-1. 꼭 필요한 자료구조 기초  (0) 2022.06.23
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday