Hikenny25

14940 - 쉬운 최단거리 본문

baekjoon (solved.ac)/class 3 Solve

14940 - 쉬운 최단거리

hikenny 2023. 12. 14. 10:41

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

 

14940번: 쉬운 최단거리

지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000) 다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이

www.acmicpc.net

 

from sys import stdin
from collections import deque

input = stdin.readline
delta = [[0,1], [0,-1], [1,0], [-1,0]]


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

dept_point = tuple()

for i in range(n):
    for j in range(m):
        if maze[i][j] == 2:
            dept_point = (i, j)
            break

q = deque([dept_point])
predecessor = [[0] * m for _ in range(n)]

while q:
    k = q.pop()
    maze[k[0]][k[1]] = 2

    for dx, dy in delta:
        r = k[0] + dx
        c = k[1] + dy

        if 0 <= r < n and 0 <= c < m and maze[r][c] == 1:
            q.appendleft((r,c))
            maze[r][c] = 2
            predecessor[r][c] = predecessor[k[0]][k[1]] + 1

for i in range(n):
    for j in range(m):
        if maze[i][j] == 0:
            print(0, end=" ")
        else:
            if predecessor[i][j] == 0 and maze[i][j] != 2:
                print(-1, end=" ")
            else:
                print(predecessor[i][j], end=" ")
    print()

 

방금 포스팅했던 SWEA 6일차 - 미로의 거리와 거의 유사한 문제이다! 여기서는 그냥 predecessor 리스트를 거의 그대로 출력해주게 바꾸기만 해줘도 정답이 된다~

'baekjoon (solved.ac) > class 3 Solve' 카테고리의 다른 글

1107 - 리모컨  (0) 2023.12.09
5430 - AC  (0) 2022.11.04
10026 - 적록색약  (0) 2022.11.03
7569 - 토마토  (0) 2022.11.01
7576 - 토마토  (1) 2022.11.01
Comments