๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ ํ’€์ด/DFS,BFS

[๋ฐฑ์ค€]14940๋ฒˆ: ์‰ฌ์šด ์ตœ๋‹จ๊ฑฐ๋ฆฌ

by syLim___ 2023. 7. 3.
728x90

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


๋ชฉํ‘œ์ง€์ ์„ ์‹œ์ž‘์ ์œผ๋กœ ํ•˜์—ฌ, ๋ชจ๋“  ์ง€์ ๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•ด์„œ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

 

"์›๋ž˜ ๊ฐˆ ์ˆ˜ ์—†๋Š” ๋•…์ธ ์œ„์น˜๋Š” 0์„ ์ถœ๋ ฅํ•˜๊ณ , ์›๋ž˜ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋•…์ธ ๋ถ€๋ถ„ ์ค‘์—์„œ ๋„๋‹ฌํ•  ์ˆ˜ ์—†๋Š” ์œ„์น˜๋Š” -1์„ ์ถœ๋ ฅํ•œ๋‹ค." ๋ผ๋Š” ์กฐ๊ฑด๋งŒ ์ž˜ ๋ณด๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

 

python

import sys
from collections import deque
input = sys.stdin.readline

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

visited = [[0 for j in range(m)] for i in range(n)]
dx = [-1,0,1,0]
dy = [0,1,0,-1]

def bfs(x,y):
  q = deque()
  q.append((x,y))

  visited[x][y] = 1
  
  while q:
    x,y = q.popleft()
      
    for i in range(4):
      nx = x + dx[i]
      ny = y + dy[i]

      if 0<=nx<n and 0<=ny<m and visited[nx][ny]==0:
        if table[nx][ny] == 0:
          visited[nx][ny] = 1
        elif table[nx][ny] == 1:
          visited[nx][ny] = visited[x][y] + 1
          q.append((nx,ny))

# ๋ชฉํ‘œ์ง€์ ์—์„œ bfs
for i in range(n):
  for j in range(m):
    if table[i][j] == 2:
      bfs(i,j)

# ๊ฒฐ๊ณผ ์ถœ๋ ฅ
for i in range(n):
  for j in range(m):
    if table[i][j] == 0:
      print(0,end=' ')
    else:
      print(visited[i][j]-1, end=' ')
  print()
728x90