๋ฐ์ํ
- ๋ฌธ์
์ฃผ์ธ๊ณต์ NxM ํฌ๊ธฐ์ ์ง์ฌ๊ฐํ ํํ์ ๋ฏธ๋ก์ ๊ฐํ ์๋ค. ์ฃผ์ธ๊ณต์ ์์น๋ (1,1) ์ด๊ณ ๋ฏธ๋ก์ ์ถ๊ตฌ๋ (N,M)์ ์์น์ ์กด์ฌํ๋ฉฐ ํ๋ฒ์ ํ ์นธ์ฉ ์ด๋ํ ์ ์๋ค. ๊ดด๋ฌผ์ด ์๋ ๋ถ๋ถ์ 0 ์๋ ๋ถ๋ถ์ 1๋ก ํ์๋์ด ์๋ค. ์ด ๋ ์ฃผ์ธ๊ณต์ด ํ์ถํ๊ธฐ ์ํด ์์ง์ฌ์ผํ๋ ์ต์ ์นธ์ ๊ฐ์๋ฅผ ๊ตฌํ์์ค. ๋จ ์นธ์ ์ ๋๋ ์์ ์นธ๊ณผ ๋ง์ง๋ง ์นธ์ ๋ชจ๋ ํฌํจํด์ ๊ณ์ฐํ๋ค.
- ํด์ค
BSF๋ก ํ ์ ์๋ ๋ฌธ์ . BFS๋ ์์ ์ง์ ์์ ๊ฐ๊น์ด ๋ ธ๋๋ถํฐ ์ฐจ๋ก๋๋ก ๊ทธ๋ํ์ ๋ชจ๋ ๋ ธ๋๋ฅผ ํ์ํ๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋ฌ๋ฏ๋ก (1,1) ์ง์ ์์๋ถํฐ BFS๋ฅผ ์ํํ์ฌ ๋ชจ๋ ๋ ธ๋์ ๊ฐ์ ๊ฑฐ๋ฆฌ ์ ๋ณด๋ก ๋ฃ์ผ๋ฉด ๋๋ค.
from collections import deque
n,m = map(int, input().split())
# 2์ฐจ์ ๋ฆฌ์คํธ์ ๋งต ์ ๋ณด ์
๋ ฅ๋ฐ๊ธฐ
graph = []
for i in range(n):
graph.append(list(map(int,input().split())))
# ์ด๋ํ ๋ฐฉํฅ ์ ์, ์ํ์ข์ฐ
dx = [-1,1,0,0]
dy = [0,0,-1,1]
def bfs(x,y):
queue = deque()
queue.append((x,y)) # ์ฒ์ ๊ฐ ํ์ ์ ์ฅ
while queue:
x,y = queue.popleft() # ํ์์ ๋นผ์ x,y์ ์ ์ฅ
# ํ์ฌ ์์น์์ ์ํ์ข์ฐ ์์น ํ์ธ
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx<0 or ny<0 or nx >=n or ny >=m : # ๊ณต๊ฐ ๋ฒ์ด๋ ๊ฒฝ์ฐ ๋ฌด์
continue
if graph[nx][ny]==0: # ๋ฒฝ์ธ ๊ฒฝ์ฐ ๋ฌด์
continue
if graph[nx][ny]==1: # ์ด๋ํ ์ ์๋ ๊ฒฝ์ฐ -> ํด๋น ๋
ธ๋์ ๊ฑฐ๋ฆฌ ์ ๋ณด ์ ์ฅ
graph[nx][ny] = graph[x][y] + 1
queue.append((nx,ny)) # ํ์ ๋ฐฉ๋ฌธํ ์์น ์ ์ฅ
# -> ์ด ์์น๋ฅผ ๋ค์ ์์์ .popleft() ํด์ ๋นผ์ x,y์ ๋ฃ๊ณ ๋ฐ๋ณต
return graph[n-1][m-1]
print(bfs(0,0))
๋ฐ์ํ
'๐ป Programming > ์๊ณ ๋ฆฌ์ฆ ํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[python] ๋ฐฑ์ค18405_๊ฒฝ์์ ์ ์ผ (DFS&BFS) (0) | 2022.02.06 |
---|---|
[python] ๋ฐฑ์ค18352_ํน์ ๊ฑฐ๋ฆฌ์ ๋์ ์ฐพ๊ธฐ (DFS&BFS) (0) | 2022.02.06 |
[python] ๋ฐฑ์ค14502_์ฐ๊ตฌ์ (DFS&BFS) (0) | 2022.02.06 |
[ํ๋ก๊ทธ๋๋จธ์ค] 'ํ์ด์ฌ์ ํ์ด์ฌ๋ต๊ฒ' ๊ฐ์ ์ ๋ฆฌ (0) | 2021.08.03 |
[DFS] ์๋ฃ์ ์ผ๋ ค ๋จน๊ธฐ (0) | 2021.05.17 |