๊ฐ์ธ์ ์ผ๋ก ์ด๋ ค์ ํ๋ ์๊ณ ๋ฆฌ์ฆ,,
์๊ณ ๋ฆฌ์ฆ
BFS๋ FIFO๋ฅผ ์์น์ผ๋ก ํ๋ Queue๋ก ๊ตฌํํ๋ค.
ํ์์ ์์ํ๋ ์ฒซ ๋ ธ๋(root)๋ฅผ queue์ ๋ฃ๊ณ ํ์์ ์์ํ๋ค.
A. queue์์ ๋ ธ๋๋ฅผ ๊บผ๋ธ๋ค.
B. ๊บผ๋ธ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ queue์ ๋ฃ๋๋ค.
queue์ ๋ ธ๋๊ฐ ์์ด์ง ๋ ๊น์ง AB๋ฐ๋ณต
๊ตฌํ
def bfs(graph, root):
visit = list()
queue = [root]
#AB๋ฐ๋ณต
while queue:
temp = queue.pop(0)
if temp not in visit:
print(temp)
visit.append(temp)
queue.extend(graph[temp])
์๊ณ ๋ฆฌ์ฆ
DFS๋ LIFO๋ฅผ ์์น์ผ๋ก ํ๋ Stack์ผ๋ก ๊ตฌํํ๋ค.
ํ์์ ์์ํ๋ ์ฒซ ๋ ธ๋(root)๋ฅผ stack์ ๋ฃ๊ณ ํ์์ ์์ํ๋ค.
A. stack์ ์ต๊ทผ ๋ ธ๋๋ฅผ ํ์ธํ๋ค.
B. ํ์ธํ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋ ์ค ์ธ์ ํ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ stack์ ๋ฃ๋๋ค.
C. ์ธ์ ํ ๋ ธ๋ ์ค ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋๊ฐ ์๋ค๋ฉด stack์์ ๋ ธ๋๋ฅผ ํ๋ ๊บผ๋ธ๋ค.
stack์ด ๋ ธ๋๊ฐ ์์ด์ง ๋ ๊น์ง ABC ๋ฐ๋ณต
๊ตฌํ
def dfs(graph, root):
visit = list()
stack = [root]
#ABC๋ฐ๋ณต
while stack :
temp = stack.pop()
if temp not in visit :
print(temp)
visit.append(temp)
stack.extend(graph[temp])
graph info
code
graph = {'A': set(['B', 'C', 'E']),
'B': set(['A', 'D', 'F']),
'C': set(['A', 'G']),
'D': set(['B']),
'E': set(['A', 'F']),
'F': set(['B', 'E']),
'G': set(['C'])}
'๐ Algorithm > Tip' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ (DP) (0) | 2022.02.17 |
---|---|
[Python] ์ต์ํ(MIN heap) / ์ต๋ํ(MAX heap) (0) | 2022.01.31 |
[Algorithm] LCA ์๊ณ ๋ฆฌ์ฆ (0) | 2021.03.28 |
[Algorithm] Dijkstra ๋ค์ต์คํธ๋ผ ์ต๋จ ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (0) | 2021.03.11 |