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
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด > DFS,BFS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค]11725๋ฒ: ํธ๋ฆฌ์ ๋ถ๋ชจ ์ฐพ๊ธฐ (0) | 2023.07.18 |
---|---|
[๋ฐฑ์ค]1926๋ฒ: ๊ทธ๋ฆผ (0) | 2023.07.16 |
[ํ๋ก๊ทธ๋๋จธ์ค]๋ฏธ๋กํ์ถ (0) | 2023.06.23 |
[softeer] ์ฅ์ ๋ฌผ ์ธ์ ํ๋ก๊ทธ๋จ (0) | 2023.05.16 |
[๋ฐฑ์ค]7562๋ฒ: ๋์ดํธ์ ์ด๋ (0) | 2023.03.20 |