๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿฆ• ๊ณต๋ฃก์ด ๋˜์ž!

๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ๋ณธ๋ฌธ

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))
๋ฐ˜์‘ํ˜•
Comments