๐๋ฌธ์
https://www.acmicpc.net/problem/2194
๐์ด๋ค ์๊ณ ๋ฆฌ์ฆ?
1. ์ต์ ์ด๋ ํ์๋ผ๋ ๋ง์ ๋ณด์๋ง์ bfs๊ฐ ๋ ์ฌ๋ผ์ผ ํ๋ค!
๐ป ์ฝ๋
# 2194 ์ ๋ ์ด๋์ํค๊ธฐ
'''
์ต์ ์ด๋ ํ์ -> bfs ๊ณ ๋ ค
1. ์ ๋์ graph์์ ์ด๋ค์์ผ๋ก ํํํ ์ง?
2. ์ฅ์ ๋ฌผ๊ณผ์ ์ถฉ๋์ ์ด๋ป๊ฒ ํ๋จํ ์ง?
3. ์ ๋์ ์ด๋์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง?
4. ์ ๋์ ๋์ฐฉ์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง?
unit
unit์ ํฌ๊ธฐ์ ๋ง๊ฒ for๋ฌธ ๋๋ฉด์
์ฅ์ ๋ฌผ๊ณผ ๋ถ๋ชํ๋์ง๋ฅผ ํ๋จํ๋ฉด ๋ ๋ฏ?
'''
from collections import deque
# ์ ๋์ด ์์ง์ผ ์ ์๋์ง ํ๋จํ๋ ํจ์ ๊ตฌํ
def Unit_check(x,y):
'''
unit์ด graph๋ฐ์ผ๋ก ๋๊ฐ๋ฉด False
unit์ด ์ฅ์ ๋ฌผ์ ๋ง๋๋ฉด False
๊ทธ ์ธ : True
'''
for i in range(x,x+a):
for j in range(y,y+b):
if i < 0 or i > (n-1) or j < 0 or j > (m-1): # graph ๋ฐ์ผ๋ก ๋๊ฐ๋ฉด
return False
if graph[i][j] == -1: # ์ฅ์ ๋ฌผ์ ๋ง๋๋ฉด
return False
return True # ๊ทธ ์ธ True return
# 2. bfs ํ์ ํจ์ ๊ตฌํ
def Bfs():
deq = deque()
deq.append(start) # ์์์ ๋ฃ๊ธฐ
dx = [0,0,-1,1] # ์ํ์ข์ฐ ์ค์
dy = [1,-1,0,0]
while deq:
x,y = deq.popleft()
if [x,y] == end: # ๋์ฐฉ์ ์ ๋์ฐฉํ๋ฉด ์ต์ ํ์ ์ถ๋ ฅ
print(graph[x][y])
return
for i in range(4): # ์ํ์ข์ฐ ํ์
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx > (n-1) or ny < 0 or ny > (m-1):
continue
if graph[nx][ny] != 0: # ๋ฐฉ๋ฌธ ์ฌ๋ถ
continue
if Unit_check(nx,ny):
graph[nx][ny] = graph[x][y] + 1
deq.append([nx,ny])
print(-1)
return
# 1. ์
๋ ฅ ๋ฐ๊ธฐ
# n: graph์ธ๋ก(ํ,x), m: graph๊ฐ๋ก(์ด,y), a: unit์ธ๋ก(ํ), b: unit๊ฐ๋ก(์ด), k: ์ฅ์ ๋ฌผ ๊ฐ์
n, m, a, b, k = map(int,input().split())
# graph ๋ง๋ค๊ธฐ
graph = [[0 for j in range(m)] for i in range(n)]
# ์ฅ์ ๋ฌผ ํ์
for i in range(k):
x,y = map(int,input().split())
graph[x-1][y-1] = -1
# ์์์ , ๋์ : idx๋ 0๋ถํฐ ์์ํ๋ ๋ฐ๋ฉด, ์ฃผ์ด์ง ๊ฐ์ 1๋ถํฐ ์์ํ๋ฏ๋ก 1์ฉ ๋นผ์ค
start = list(map(int,input().split()))
start[0] -= 1
start[1] -= 1
end = list(map(int,input().split()))
end[0] -= 1
end[1] -= 1
Bfs()
๐์ฝ๋ ์ค๋ช
์ฃผ์์ผ๋ก ๋์ฒดํ๋ค
'Algorithm > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 16985 Maaaaaaaaaze(ํ์ด์ฌ/python) (0) | 2023.08.16 |
---|---|
[๋ฐฑ์ค] 14940 ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ(ํ์ด์ฌ/python) (0) | 2023.08.15 |
[๋ฐฑ์ค] 1463 1๋ก ๋ง๋ค๊ธฐ (ํ์ด์ฌ/python) dp, bfs (0) | 2023.08.03 |
[๋ฐฑ์ค] 7576 ํ ๋งํ (ํ์ด์ฌ/python) (0) | 2023.08.02 |
[๋ฐฑ์ค] 1992 ์ฟผ๋ํธ๋ฆฌ (ํ์ด์ฌ/python) (0) | 2023.07.12 |