kλ² λ²½μ νκ΄΄ ν μ μλ€λ μ μ΄λ€.
λλΆλΆμ μ½λκ° λΉμ·νμ§λ§, μ€μν ν¬μΈνΈκ° 2κ°μ§κ° μλ€.
β λ€μ μ΄λν κ³³μ΄ λ²½μΈ κ²½μ°, λ²½μ νλ²λ§ νκ΄΄νλ κ²μ΄ μλκΈ° λλ¬Έμ λ²½μ μ΄λ―Έ νκ΄΄ν κ³³μΈμ§ μλμ§ μ¬λΆλ₯Ό νμ
νλ μμ
μ΄ νμνλ€.
β kλ² λ²½μ νκ΄΄ν μ μμΌλ―λ‘ νκ΄΄ν λλ§λ€ -1μ© μ€μ΄λλ λ°©ν₯μΌλ‘ μ½λλ₯Ό μ§°λ€.
import sys
from collections import deque
n, m, k = map(int, sys.stdin.readline().split())
graph = []
for _ in range(n):
graph.append(list(map(int, list(sys.stdin.readline().rstrip()))))
visited = [[[0] * (k+1) for _ in range(m)] for _ in range(n)]
# kλ² λ²½μ νκ΄΄ν μ μμΌλ―λ‘ νκ΄΄ν λλ§λ€ -1μ© μ€μ΄λ¬
visited[0][0][k] = 1
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def bfs(x, y, cnt):
queue = deque([(x, y, cnt)])
while queue:
cur_x, cur_y, cnt = queue.popleft()
if cur_x == n-1 and cur_y == m-1:
return visited[cur_x][cur_y][cnt]
for i in range(4):
nx, ny = cur_x + dx[i], cur_y + dy[i]
if 0 <= nx < n and 0 <= ny < m:
# λ€μ μ΄λν κ³³μ΄ λ²½μ΄ μλκ³ , μμ§ νλ²λ λ°©λ¬Ένμ§ μμ κ³³μ΄λ©΄
if graph[nx][ny] == 0 and visited[nx][ny][cnt] == 0:
visited[nx][ny][cnt] = visited[cur_x][cur_y][cnt] + 1
queue.append((nx, ny, cnt))
# λ€μ μ΄λν κ³³μ΄ λ²½μ΄κ³ , λ²½μ νκ΄΄ν κΈ°νκ° 0λ³΄λ€ ν¬κ³ kκ° μ΄νμΌ κ²½μ°
# λ²½μ μ΄λ―Έ νκ΄΄ν κ³³μΈμ§ μλμ§ νμΈνλ μμ
νμ!
elif graph[nx][ny] == 1 and 0 < cnt <= k and visited[nx][ny][cnt-1] == 0 :
visited[nx][ny][cnt-1] = visited[cur_x][cur_y][cnt] + 1
queue.append((nx, ny, cnt-1))
return -1
print(bfs(0, 0, k))