14940-s1 성공
This commit is contained in:
67
workbook_8708/14940-s1.py
Normal file
67
workbook_8708/14940-s1.py
Normal file
@@ -0,0 +1,67 @@
|
||||
# 쉬운 최단거리
|
||||
|
||||
import sys
|
||||
from collections import deque
|
||||
|
||||
input = sys.stdin.readline
|
||||
|
||||
def find_target(grid, n, m):
|
||||
for i in range(n):
|
||||
for j in range(m):
|
||||
if grid[i][j] == 2:
|
||||
target = (i, j)
|
||||
return target
|
||||
return (-1, -1)
|
||||
|
||||
def set_zero_land(grid, visited, n, m):
|
||||
for i in range(n):
|
||||
for j in range(m):
|
||||
if grid[i][j] == 0:
|
||||
visited[i][j] = 0
|
||||
return
|
||||
|
||||
|
||||
def bfs(grid, target, n, m):
|
||||
dr = [1, -1, 0, 0]
|
||||
dc = [0, 0, 1, -1]
|
||||
visited = [[-1]*m for _ in range(n)]
|
||||
set_zero_land(grid, visited, n, m)
|
||||
q = deque([target])
|
||||
visited[target[0]][target[1]] = 0
|
||||
|
||||
while q:
|
||||
r, c = q.popleft()
|
||||
for i in range(4):
|
||||
now_r, now_c = r+dr[i], c+dc[i]
|
||||
if now_r == target[0] and now_c == target[1]:
|
||||
continue
|
||||
if 0 <= now_r < n and 0 <= now_c < m and grid[now_r][now_c] != 0 and visited[now_r][now_c] == -1:
|
||||
q.append((now_r, now_c))
|
||||
visited[now_r][now_c] = visited[r][c] + 1
|
||||
|
||||
return visited
|
||||
|
||||
def solution():
|
||||
n, m = map(int, input().rstrip().split())
|
||||
|
||||
grid = [list(map(int, input().rstrip().split())) for _ in range(n)]
|
||||
|
||||
target = find_target(grid, n, m)
|
||||
|
||||
result = bfs(grid, target, n, m)
|
||||
|
||||
for i in range(n):
|
||||
print(*result[i])
|
||||
|
||||
return
|
||||
|
||||
|
||||
solution()
|
||||
|
||||
"""
|
||||
걸린 시간: 2:39~56 51~
|
||||
|
||||
시간 복잡도:
|
||||
|
||||
해설:
|
||||
"""
|
||||
Reference in New Issue
Block a user