기본적인 그래프 탐색 방법인 깊이 우선 탐색과 너비 우선 탐색에 대해 알아보겠다.
mygraph = {"A": {"B","C"},
"B": {"A","D"},
"C": {"A","D","E"},
"D": {"B","C","F"},
"E": {"C","G","H"},
"F": {"D"},
"G": {"E","H"},
"H": {"E","G"}
}
def dfs(graph, start, visited = set()): # 인자로 그래프, 시작 정점, 방문 정점을 받음
if start not in visited:
visited.add(start) # start 정점을 방문
print(start, end=" ")
nbr = graph[start] - visited # start의 인접정점에서 방문 정점을 제외
for v in nbr: # 방문정점을 제외한 start의 인접정점을 방문
dfs(graph, v, visited)
def bfs(graph, start): # 인자로 그래프, 시작 정점을 받음
visited = set([start]) # start 정점을 방문 정점 집합에 저장 및 집합 객체 생성
queue = collections.deque([start]) # 큐처럼 사용할 덱 객체 생성 및 start 정점 삽입
while queue: # 큐에 요소가 남아 있으면 계속 실행
vertex = queue.popleft() # dequeue 실시
print(vertex, end=" ")
nbr = graph[vertex] - visited # 인접정점에서 방문 정점 제외
for v in nbr: # 남은 인접 정점들을 v를 큐에 삽입
visited.add(v)
queue.append(v)