Development/CodingTest
λλΉ μ°μ νμ(BFS)
Kirok Kim
2021. 12. 28. 21:19
λλΉ μ°μ νμ(BFS)
from collections import deque
#BFS λ©μλ μ μ
def bfs(graph, start, visited):
# ν(Queue) ꡬνμ μν΄ deque λΌμ΄λΈλ¬λ¦¬ μ¬μ©
queue = deque([start])
# νμ¬ λ
Έλλ₯Ό λ°©λ¬Έ μ²λ¦¬
visited[start] = True
# νκ° λΉ λκΉμ§ λ°λ³΅
while queue:
# νμμ νλμ μμλ₯Ό λ½μ μΆλ ₯νκΈ°
v = queue.popleft()
print(v, end=' ')
# μμ§ λ°©λ¬Ένμ§ μμ μΈμ ν μμλ€μ νμ μ½μ
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
# κ° λ
Έλκ° μ°κ²°λ μ 보λ₯Ό νν (2μ°¨μ 리μ€νΈ)
graph = [
[],
[2,3,8],
[1,7],
[1,4,5],
[3,5],
[3,4],
[7],
[2,6,8],
[1,7]
]
# κ° λ
Έλκ° λ°©λ¬Έλ μ 보λ₯Ό νν(1μ°¨μ 리μ€νΈ)
visited=[False]*9
# μ μλ DFS ν¨μ νΈμΆ
bfs(graph,1,visited)
>>> 1 2 3 8 7 4 5 6
# λ―Έλ‘ νμΆ
# BFS μμ€μ½λ ꡬν
def bfs(x,y):
# ν(Queue) ꡬνμ μν΄ deque λΌμ΄λΈλ¬λ¦¬ μ¬μ©
queue = deque()
queue.append((x,y))
# νκ° λΉ λκΉμ§ λ°λ³΅νκΈ°
while queue:
x,y= queue.popleft()
# νμ¬ μμΉμμ 4κ°μ§ λ°©ν₯μΌλ‘μ μμΉ νμΈ
for i in range(4):
nx=x+dx[i]
ny=y+dy[i]
# λ―Έλ‘ μ°ΎκΈ° 곡κ°μ λ²μ΄λ κ²½μ° λ¬΄μ
if nx<0 or nx>=n or ny<0 or ny>=m:
continue
# ν΄λΉ λ
Έλλ₯Ό μ²μ λ°©λ¬Ένλ κ²½μ°μλ§ μ΅λ¨ 거리 κΈ°λ‘
if graph[nx][ny] ==1:
graph[nx][ny]=graph[x][y]+1
queue.append((nx,ny))
# κ°μ₯ μ€λ₯Έμͺ½ μλκΉμ§μ μ΅λ¨ 거리 λ°ν
return graph[n-1][m-1]
from collections import deque
# N, Mμ 곡백μ κΈ°μ€μΌλ‘ ꡬλΆνμ¬ μ
λ ₯ λ°κΈ°
n,m =map(int,input().split())
# 2μ°¨μ 리μ€νΈμ λ§΅ μ 보 μ
λ ₯ λ°κΈ°
graph=[]
for i in range(n):
graph.append(list(map(int,input())))
# μ΄λν λ€ κ°μ§ λ°©ν₯ μ μ (μ, ν, μ’, μ°)
dx = [-1,1,0,0]
dy = [0,0,-1,1]
# BFSλ₯Ό μνν κ²°κ³Ό μΆλ ₯
print(bfs(0,0))
λ°μν