๐๏ธ Algorithm/๐ฉ ๋ฐฑ์ค
๐ฉ [๋ฐฑ์ค] [Python] [Gold3] 1600๋ฒ_๋ง์ด ๋๊ณ ํ ์์ญ์ด
Dbswnstjd
2023. 3. 16. 20:46
๋ฌธ์
https://www.acmicpc.net/problem/1600
1600๋ฒ: ๋ง์ด ๋๊ณ ํ ์์ญ์ด
์ฒซ์งธ ์ค์ ์ ์ K๊ฐ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค์ ๊ฒฉ์ํ์ ๊ฐ๋ก๊ธธ์ด W, ์ธ๋ก๊ธธ์ด H๊ฐ ์ฃผ์ด์ง๋ค. ๊ทธ ๋ค์ H์ค์ ๊ฑธ์ณ W๊ฐ์ ์ซ์๊ฐ ์ฃผ์ด์ง๋๋ฐ, 0์ ์๋ฌด๊ฒ๋ ์๋ ํ์ง, 1์ ์ฅ์ ๋ฌผ์ ๋ปํ๋ค. ์ฅ์ ๋ฌผ์ด ์
www.acmicpc.net
ํ์ด
# ๋ฐฑ์ค 1600๋ฒ ๋ฌธ์ - ๋ง์ด ๋๊ณ ํ ์์ญ์ด
from collections import deque
import sys
input = sys.stdin.readline
monkey_dx = [0, 1, 0, -1]
monkey_dy = [1, 0, -1, 0]
horse_dx = [-2, -1, 1, 2, 2, 1, -1, -2]
horse_dy = [1, 2, 2, 1, -1, -2, -2, -1]
def bfs(n):
q = deque()
q.append((0, 0, n))
visited = [[[0] * (n + 1) for _ in range(w)] for _ in range(h)]
while q:
x, y, k = q.popleft()
if x == h-1 and y == w-1:
return visited[x][y][k]
if k > 0:
for i in range(8):
nx = x + horse_dx[i]
ny = y + horse_dy[i]
if 0 <= nx < h and 0 <= ny < w:
if graph[nx][ny] != 1 and visited[nx][ny][k-1] == 0:
visited[nx][ny][k-1] = visited[x][y][k] + 1
q.append((nx, ny, k-1))
for i in range(4):
nx = x + monkey_dx[i]
ny = y + monkey_dy[i]
if 0 <= nx < h and 0 <= ny < w:
if graph[nx][ny] != 1 and visited[nx][ny][k] == 0:
visited[nx][ny][k] = visited[x][y][k] + 1
q.append((nx, ny, k))
return -1
k = int(input())
w, h = map(int, input().split())
graph = [list(map(int, input().split())) for _ in range(h)]
result = bfs(k)
print(result)