백준 온라인 저지, BFS / 14940번: 쉬운최단거리 (파이썬 / , 백준 골드문제)
2022. 1. 2. 15:47ㆍ알고리즘/BFS
728x90
반응형
문제
지도가 주어지면 모든 지점에 대해서 목표지점까지의 거리를 구하여라.
문제를 쉽게 만들기 위해 오직 가로와 세로로만 움직일 수 있다고 하자.
입력
지도의 크기 n과 m이 주어진다. n은 세로의 크기, m은 가로의 크기다.(2 ≤ n ≤ 1000, 2 ≤ m ≤ 1000)
다음 n개의 줄에 m개의 숫자가 주어진다. 0은 갈 수 없는 땅이고 1은 갈 수 있는 땅, 2는 목표지점이다. 입력에서 2는 단 한개이다.
출력
각 지점에서 목표지점까지의 거리를 출력한다. 원래 갈 수 없는 땅인 위치는 0을 출력하고, 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다.
예제 입력 1
15 15 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1
예제 출력 1
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 11 12 13 14 15 16 17 18 19 20 0 0 0 0 25 12 13 14 15 16 17 18 19 20 21 0 29 28 27 26 13 14 15 16 17 18 19 20 21 22 0 30 0 0 0 14 15 16 17 18 19 20 21 22 23 0 31 32 33 34
접근 방법
- 0. 목표지점에서 다른 지점까지 BFS를 통해 거리를 갱신한다.
- 1. 이후 출력 조건에 맞게 출력한다.
코드
# https://www.acmicpc.net/problem/14940
# 접근 방법
# 0. 목표지점에서 다른 지점까지 BFS를 통해 거리를 갱신한다.
# 1. 이후 출력 조건에 맞게 출력한다.
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
visited = [[-1 for _ in range(m)] for _ in range(n)]
queue = deque([])
for r in range(n):
for c in range(m):
if board[r][c] == 2:
queue.append([r, c])
visited[r][c] = 0
elif board[r][c] == 0:
visited[r][c] = 0
while queue:
r, c = queue.popleft()
for dr, dc in [[1, 0], [-1, 0], [0, 1], [0, -1]]:
if 0<=r+dr
728x90
반응형
'알고리즘 > BFS' 카테고리의 다른 글
백준 온라인 저지, BFS / 1707번: 이분그래프 (파이썬 / , 백준 골드문제) (0) | 2022.04.06 |
---|---|
백준 온라인 저지, BFS / 3055번: 탈출 (파이썬 / , 백준 골드문제) (0) | 2022.03.29 |
백준 온라인 저지, BFS / 11123번: 양 한마리... 양 두마리... (파이썬 / , 백준 실버문제) (0) | 2022.01.02 |
백준 온라인 저지, BFS / 1926번: 그림 (파이썬 / , 백준 실버문제) (0) | 2021.12.13 |
백준 온라인 저지, BFS / 7569번: 토마토 (파이썬 / , 백준 실버문제) (0) | 2021.12.10 |