https://www.acmicpc.net/problem/7569
κ·Έλν (BFS)
μ² μμ ν λ§ν λμ₯μμλ ν λ§ν λ₯Ό 보κ΄νλ ν° μ°½κ³ λ₯Ό κ°μ§κ³ μλ€. ν λ§ν λ μλμ κ·Έλ¦Όκ³Ό κ°μ΄ 격μλͺ¨μ μμμ μΉΈμ νλμ© λ£μ λ€μ, μμλ€μ μμ§μΌλ‘ μμ μ¬λ €μ μ°½κ³ μ 보κ΄νλ€.
μ°½κ³ μ 보κ΄λλ ν λ§ν λ€ μ€μλ μ μ΅μ κ²λ μμ§λ§, μμ§ μ΅μ§ μμ ν λ§ν λ€λ μμ μ μλ€. λ³΄κ΄ ν νλ£¨κ° μ§λλ©΄, μ΅μ ν λ§ν λ€μ μΈμ ν κ³³μ μλ μ΅μ§ μμ ν λ§ν λ€μ μ΅μ ν λ§ν μ μν₯μ λ°μ μ΅κ² λλ€. νλμ ν λ§ν μ μΈμ ν κ³³μ μ, μλ, μΌμͺ½, μ€λ₯Έμͺ½, μ, λ€ μ¬μ― λ°©ν₯μ μλ ν λ§ν λ₯Ό μλ―Ένλ€. λκ°μ λ°©ν₯μ μλ ν λ§ν λ€μκ²λ μν₯μ μ£Όμ§ λͺ»νλ©°, ν λ§ν κ° νΌμ μ μ λ‘ μ΅λ κ²½μ°λ μλ€κ³ κ°μ νλ€. μ² μλ μ°½κ³ μ 보κ΄λ ν λ§ν λ€μ΄ λ©°μΉ μ΄ μ§λλ©΄ λ€ μ΅κ² λλμ§ κ·Έ μ΅μ μΌμλ₯Ό μκ³ μΆμ΄ νλ€.
ν λ§ν λ₯Ό μ°½κ³ μ 보κ΄νλ 격μλͺ¨μμ μμλ€μ ν¬κΈ°μ μ΅μ ν λ§ν λ€κ³Ό μ΅μ§ μμ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ‘μ λ, λ©°μΉ μ΄ μ§λλ©΄ ν λ§ν λ€μ΄ λͺ¨λ μ΅λμ§, κ·Έ μ΅μ μΌμλ₯Ό ꡬνλ νλ‘κ·Έλ¨μ μμ±νλΌ. λ¨, μμμ μΌλΆ μΉΈμλ ν λ§ν κ° λ€μ΄μμ§ μμ μλ μλ€.
첫 μ€μλ μμμ ν¬κΈ°λ₯Ό λνλ΄λ λ μ μ M,Nκ³Ό μμμ¬λ €μ§λ μμμ μλ₯Ό λνλ΄λ Hκ° μ£Όμ΄μ§λ€. Mμ μμμ κ°λ‘ μΉΈμ μ, Nμ μμμ μΈλ‘ μΉΈμ μλ₯Ό λνλΈλ€. λ¨, 2 β€ M β€ 100, 2 β€ N β€ 100, 1 β€ H β€ 100 μ΄λ€. λμ§Έ μ€λΆν°λ κ°μ₯ λ°μ μμλΆν° κ°μ₯ μμ μμκΉμ§μ μ μ₯λ ν λ§ν λ€μ μ λ³΄κ° μ£Όμ΄μ§λ€. μ¦, λμ§Έ μ€λΆν° Nκ°μ μ€μλ νλμ μμμ λ΄κΈ΄ ν λ§ν μ μ λ³΄κ° μ£Όμ΄μ§λ€. κ° μ€μλ μμ κ°λ‘μ€μ λ€μ΄μλ ν λ§ν λ€μ μνκ° Mκ°μ μ μλ‘ μ£Όμ΄μ§λ€. μ μ 1μ μ΅μ ν λ§ν , μ μ 0 μ μ΅μ§ μμ ν λ§ν , μ μ -1μ ν λ§ν κ° λ€μ΄μμ§ μμ μΉΈμ λνλΈλ€. μ΄λ¬ν Nκ°μ μ€μ΄ Hλ² λ°λ³΅νμ¬ μ£Όμ΄μ§λ€.
ν λ§ν κ° νλ μ΄μ μλ κ²½μ°λ§ μ λ ₯μΌλ‘ μ£Όμ΄μ§λ€.
5 3 2
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
μ¬λ¬λΆμ ν λ§ν κ° λͺ¨λ μ΅μ λκΉμ§ μ΅μ λ©°μΉ μ΄ κ±Έλ¦¬λμ§λ₯Ό κ³μ°ν΄μ μΆλ ₯ν΄μΌ νλ€. λ§μ½, μ μ₯λ λλΆν° λͺ¨λ ν λ§ν κ° μ΅μ΄μλ μνμ΄λ©΄ 0μ μΆλ ₯ν΄μΌ νκ³ , ν λ§ν κ° λͺ¨λ μ΅μ§λ λͺ»νλ μν©μ΄λ©΄ -1μ μΆλ ₯ν΄μΌ νλ€.
4
μ²μμ μ΅μκ°μ ꡬνλ κ²μ΄λ―λ‘ BFS + μ΅λ¨κ±°λ¦¬ κ°λ
μΈκ²μ μμμ±λ€.
κ·Έλ¬λ.. λ¬Έμ λ₯Ό μλͺ» μ΄ν΄νλ λ°λμ μ΅μ 2μκ°μ λ λ¦° λ¬Έμ μ΄λ€.
μ²μμλ μ
λ ₯κ°μ΄ 5 3 2μΈλ° μ 6μ€μ΄λ λ€μ΄μ€μ§? νκ³ νμ°Έ λμ μ΄ν΄νμ§ λͺ»ν΄μ ν€λ©¨μλλ°, μκ³ λ³΄λκΉ λͺ¨λ νμ μ λ³΄κ° νλ²μ λ€μ΄μμ λ΄κ° λͺ»μμμ±λ κ²μ΄μλ€.
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
μ΄κ² κ°μ₯ λ°μ κΉλ¦° νμΈ κ²μ΄κ³
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
μκ² κ·Έ μμ κΉλ¦° νμΈ κ²μ΄λ€.
κ° νλ§λ€μ μ 보λ₯Ό λ°κ³ μκ³ , 3μ°¨μ μμ λ¬Έμ μ΄λκΉ 3μ°¨μ λ°°μ΄μ λκ³ νμ΄μΌ νλ€. μ§κΈκΉμ§ 2μ°¨μ λ°°μ΄ μ½λλ₯Ό μΈμλκ³ μμ μ½μ§μ νκ³ μμλ κ²..! γ
γ
3μ°¨μ BFSλ μ²μ νμ΄λ³΄κΈ° λλ¬Έμ κΈ΄μ₯νμ§λ§ μ νμ΄λ³΄μ.
from collections import deque
Q = deque()
M, N, H = map(int,input().split())
arr = [[1, 0, 0], [-1, 0, 0],[0, 1, 0],[0, -1, 0],[0, 0, 1],[0, 0, -1]]
tomato = [[] for i in range(H)]
day = 0
for a in range(H):
for _ in range(N):
tomato[a].append(list(map(int,input().split())))
for i in range(H):
for j in range(N):
for z in range(M):
if tomato[i][j][z] == 1:
Q.append([i, j, z])
while (len(Q) > 0):
poped = Q.popleft()
z = poped[0]
y = poped[1]
x = poped[2]
for i in range(6):
Z = z + arr[i][0]
Y = y + arr[i][1]
X = x + arr[i][2]
if X < 0 or Y < 0 or X >= M or Y >= N or Z < 0 or Z >= H:
continue
if tomato[Z][Y][X] == 0:
tomato[Z][Y][X] = tomato[z][y][x] + 1
Q.append([Z, Y, X])
for i in range(H):
for j in range(N):
for z in range(M):
day = max(day, tomato[i][j][z])
if tomato[i][j][z] == 0:
print(-1)
exit()
print(day - 1)
3μ°¨μμ κ³ λΉλ§ λκΈ°λ©΄ λλ¨Έμ§ μ½λλ BFSμ μ νμ μΈ μ νμ΄λ μ΄λ ΅μ§λ μλ€.
3μ°¨μ λ°°μ΄μ λ§λ€μ΄ μ£Όκ³ , 3μ°¨μ μ 보λ₯Ό μ λλ‘ μ
λ ₯ν΄ λ£λλ€.
μ΄ν 3μ°¨μ μνλ₯Ό λλ©΄μ μ΅μ μΉκ΅¬λ€μ Qμ λ£μ΄λκ³ , νλμ© κΊΌλ΄λ©΄μ μ΅μ μΉκ΅¬λ€κ³Ό μΈμ ν μ,ν,μ’,μ° μΉκ΅¬λ€μ λν΄μ μ΅μ λ μ§λ₯Ό μ§μ λ£μ΄μ£Όμ΄μ λ°©λ¬Έν κ³³μ΄λΌλ κ³³μ νννλ€.
μ΄ν, κ°μ₯ ν° κ°μ μ°Ύμμ dayμ λ£κ³ , μ΅μ ν λ§ν 1λΆν° μμνμΌλκΉ λ§μ§λ§μ λ§μ΄λμ€ 1μ ν΄μ€λ€. λ§μ½ μμ΅μ ν λ§ν 0μ΄ μ‘΄μ¬νλ€λ©΄ λͺ¨λ μ΅λ λ°©λ²μ΄ μ‘΄μ¬νμ§ μλ κ²μ΄λκΉ -1μ μΆλ ₯νλ€.