ํฐ์คํ ๋ฆฌ ๋ทฐ
๐จ๐ป ์ฝ๋ฉํ
์คํธ/๋ฐฑ์ค
๋ฐฑ์ค: 1600 ๋ง์ด ๋๊ณ ํ ์์ญ์ด
dirmathfl 2020. 9. 14. 22:11728x90
๋ฐ์ํ
๋ฌธ์
๋ฌธ์ ํ์ด
๋ฌธ์ ์์ ์์ญ์ด๋ K๋ฒ ๋์, ๋์ดํธ์ ์ด๋๊ณผ ๊ฐ์ด 8 ๋ฐฉํฅ์ผ๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ ๊ทธ ์ดํ์๋ ์, ํ, ์ข, ์ฐ ํ์นธ์ฉ ์์ง์ด๊ฒ ๋๋ค. ์ด๋, ์ต์์ ํ์๋ก ์ฐ์ธก ํ๋จ ์๋์ ์ขํ๋ก ๋์ฐฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ์ด๋ ๋ฒฝ์ K๋ฒ ๋ถ์ ์ ์๋ ๋ฒฝ ๋ถ์๊ณ ์ด๋ํ๊ธฐ 2์ ์ ์ฌํ ๋ก์ง์ผ๋ก ํ๋ฉด ๋๋ค.
- BFS๋ฅผ ํตํด, K๊ฐ ์๋ค๋ฉด ๋ง, ์์ญ์ด ์ฒ๋ผ ์ด๋๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ ์ถ๊ฐํ๋ค.
- K๊ฐ ์๋ค๋ฉด, ์์ญ์ด ์ฒ๋ผ ์ด๋๊ฐ๋ฅํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ํ์ ์ถ๊ฐํ๋ค.
- ๋ง ์ฒ๋ผ ์ด๋ํ ํ์์ ๋ฐ๋ผ ๋ฐฉ๋ฌธ ๊ฒฝ๋ก๋ฅผ ๊ตฌ๋ถํ์ฌ์ผ ํ๋ค.
- ์ด๋ฅผ ์ํด `visited`๋ฅผ x, y, ๋ง์ฒ๋ผ ์ด๋ํ ํ์๋ก ํ์ฌ 3์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ ๋ค.
- `visited`๋ ๋จ์ํ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ ๊ฒ์ด ์๋, ๊ธฐ์กด์ ๊ฒฝ๋ก์์ ํด๋น ๊ฒฝ๋ก๋ก ๋ฐฉ๋ฌธํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ๋์ ํ๋ค.
์ฝ๋
from sys import stdin
from collections import deque
def visitable(x, y, next_k):
return 0 <= x < h and 0 <= y < w and not visited[x][y][next_k] and not graph[x][y]
def bfs(start):
q = deque([start])
horse_dirs = ((-1, 2), (1, 2), (2, 1), (2, - 1),
(1, -2), (-1, -2), (-2, -1), (-2, 1))
monkey_dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
while q:
x, y, cur_k = q.popleft()
if (x, y) == (h - 1, w - 1):
return visited[x][y][cur_k]
dirs = monkey_dirs + horse_dirs if cur_k > 0 else monkey_dirs
for idx, delta in enumerate(dirs):
next_x, next_y = x + delta[0], y + delta[1]
next_k = cur_k - 1 if idx > 3 else cur_k
if visitable(next_x, next_y, next_k):
q.append((next_x, next_y, next_k))
visited[next_x][next_y][next_k] = visited[x][y][cur_k] + 1
return -1
if __name__ == '__main__':
k = int(stdin.readline())
w, h = map(int, stdin.readline().split())
graph = [list(map(int, stdin.readline().split())) for _ in range(h)]
visited = [[[0] * (k + 1) for _ in range(w)]for _ in range(h)]
print(bfs((0, 0, k)))
3์ฐจ์ ๋ฐฐ์ด๋ก `visited`๋ฅผ ๋ง๋ค์ด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ ๋ฐ๋ก ๋ ์ฌ๋ฆฌ์ง ๋ชปํ์ฌ, ์ด๋ฆฌ์ ๋ฆฌ ํค๋งค์ ์๊ฐ์ ์ข ์ป๋ค.๐
728x90
๋ฐ์ํ
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 17141 ์ฐ๊ตฌ์ 2 (0) | 2020.09.17 |
---|---|
๋ฐฑ์ค: 3184 ์ (0) | 2020.09.15 |
๋ฐฑ์ค: 14395 4์ฐ์ฐ (0) | 2020.09.13 |
๋ฐฑ์ค: 10026 ์ ๋ก์์ฝ (0) | 2020.09.13 |
๋ฐฑ์ค: 11728 ๋ฐฐ์ด ํฉ์น๊ธฐ (0) | 2020.09.12 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ