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

[๋ฐฑ์ค€]7576๋ฒˆ: ํ† ๋งˆํ† 

by syLim___ 2023. 2. 25.
728x90

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

 

7576๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N์ด ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M,N ≤ 1,000 ์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ๋Š” ํ•˜๋‚˜์˜ ์ƒ์ž์— ์ €์žฅ๋œ ํ† ๋งˆํ† 

www.acmicpc.net


ํ•˜๋‹ค๊ฐ€ ์ž˜ ์•ˆ ๋ผ์„œ ๋‹ค๋ฅธ ๋ถ„๋“ค ์ฝ”๋“œ ์ฐธ๊ณ ํ•ด์„œ ์ˆ˜์ •ํ–ˆ๋‹ค..

๋‚˜๋Š” ์–ธ์ œ์ฏค ํ˜ผ์ž์„œ ๋น ๋ฅด๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์„๊นŒ?ใ… ใ…กใ… ใ…œ

 

์•„์ด๋””์–ด

  1. ์ฒ˜์Œ๋ถ€ํ„ฐ ์ต์–ด ์žˆ๋Š” ํ† ๋งˆํ†  ์ขŒํ‘œ๋ฅผ ํ์— ์ €์žฅํ•˜๊ณ  bfs๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค
  2. ์ธ์ ‘ํ•œ ์นธ ์ค‘์—์„œ ์•„์ง ์•ˆ ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ์œผ๋ฉด (์ธ์ ‘ํ•œ ์ขŒํ‘œ์˜ ๊ทธ๋ž˜ํ”„ ๊ฐ’)์„ (ํ˜„์žฌ๊ทธ๋ž˜ํ”„๊ฐ’+1) ๋กœ ๋ฐ”๊พธ์–ด์ค€๋‹ค
  3. bfs๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ์—ฌ์ „ํžˆ ์•ˆ ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ต์ง€ ์•Š์€ ํ† ๋งˆํ† ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด 1์„ ๋นผ์ค€๋‹ค.
  • ํ† ๋งˆํ† ๊ฐ€ ๋ชจ๋‘ ์ต์—ˆ๋‹ค๋ฉด ๊ทธ๋ž˜ํ”„๊ฐ’์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์ด ์†Œ์š” ์ผ์ˆ˜์ด๋‹ค. (์†Œ์š” ์ผ์ˆ˜๋Š” 2๋ถ€ํ„ฐ ์นด์šดํŠธํ–ˆ์œผ๋‹ˆ 1์„ ๋นผ๊ณ  ์ถœ๋ ฅํ•ด์ค€๋‹ค.)

 

 -์˜ˆ์‹œ)

 

์ดˆ๊ธฐ ๊ทธ๋ž˜ํ”„

1 1 0 -1
0 0 -1 1
0 0 -1 0

 

1์ผ ๊ฒฝ๊ณผ ํ›„

1 1 2 -1
2 2 -1 1
0 0 -1 2

 

2์ผ ๊ฒฝ๊ณผ ํ›„

1 1 2 -1
2 2 -1 1
3 3 -1 2

 

bfs์ข…๋ฃŒ

 

from collections import deque

dx=[-1,1,0,0]
dy=[0,0,-1,1]

def tomato():
  
  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 graph[nx][ny]==0:
        graph[nx][ny]=graph[x][y]+1
        q.append((nx,ny))
  return


#์ž…๋ ฅ๋ฐ›๊ธฐ
  
m,n = map(int,input().split())

graph=[]
for i in range(n):
  graph.append(list(map(int,input().split())))

#์ด๋ฏธ ์ต์–ด์žˆ๋Š” ํ† ๋งˆํ†  ์ขŒํ‘œ๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค
q = deque()
for i in range(n):
  for j in range(m):
    if graph[i][j]==1:
      q.append((i,j))
      
#bfs์ˆ˜ํ–‰
tomato()

#์ •๋‹ต ์ถœ๋ ฅ
ans=0
for i in range(n):
  for j in range(m):
    #์•ˆ ์ต์€ ํ† ๋งˆํ† ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์กด์žฌํ•˜๋ฉด -1์„ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒ
    if graph[i][j] == 0:
      print(-1)
      exit(0)
    if graph[i][j]>ans:
      ans = graph[i][j]

print(ans-1)

 

 

 

 

 

728x90