코딩테스트
dfs,bfs
다트네
2021. 11. 8. 01:13
DFS
graph = {'A':['B','C'],
'B':['A','D','E'],
'C':['A','G','H'],
'D':['B'],
'E':['B','F'],
'F':['E'],
'G':['C'],
'H':['C']}
def dfs_iteration(graph, root):
# visited = 방문한 꼭지점들을 기록한 리스트
visited = []
# dfs는 stack, bfs는 queue개념을 이용한다.
stack = [root]
while(stack): #스택에 남은것이 없을 때까지 반복
node = stack.pop() # node : 현재 방문하고 있는 꼭지점
#현재 node가 방문한 적 없다 -> visited에 추가한다.
#그리고 해당 node의 자식 node들을 stack에 추가한다.
if(node not in visited):
visited.append(node)
stack.extend(graph[node])
return visited
print(dfs_iteration(graph,'A'))
결과: ['A', 'C', 'H', 'G', 'B', 'E', 'F', 'D']
BFS
node.pop() -> 오른쪽에서부터 차례로 제거와 반환
node.popleft() -> 왼쪽부터 차례로 제거와 반환
from collections import deque
def BFS(graph,root):
visited=[]
adj=deque([root])
while adj:
node=adj.popleft()
if node not in visited:
visited.append(node)
adj.extend(graph[node])
return visited
graph = {'A':['B','C'],
'B':['A','D','E'],
'C':['A','G','H'],
'D':['B'],
'E':['B','F'],
'F':['E'],
'G':['C'],
'H':['C']}
print(BFS(graph,'A'))
결과: ['A', 'B', 'C', 'D', 'E', 'G', 'H', 'F']