파이썬에 제공하는 딕셔너리와 리스트 자료 구조를 활용해서 그래프를 표현할 수 있다.
각 노드들은 key로, 노드에 연결된 인접노드들은 value로 넣는다.
graph = dict()
graph['A'] = ['B', 'C']
graph['B'] = ['A', 'D']
graph['C'] = ['A', 'G', 'H', 'I']
graph['D'] = ['B', 'E', 'F']
graph['E'] = ['D']
graph['F'] = ['D']
graph['G'] = ['C']
graph['H'] = ['C']
graph['I'] = ['C', 'J']
graph['J'] = ['I']
def dfs(graph, start_node):
visited = list()
need_visit = list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop()
if node not in visited:
visited.append(node)
values = graph[node]
# reversed()를 안하면 위 그림과 다르게 오른쪽 방향으로 탐색한다.
need_visit.extend(reversed(values))
return visited
from collections import deque
def dfs(graph, start_node):
visited = deque()
need_visit = list()
need_visit.append(start_node)
while need_visit:
node = need_visit.pop()
if node not in visited:
visited.append(node)
need_visit.extend(reversed(graph[node]))
return list(visited)