정점(node)과 그 정점을 연결하는 간선(edge)으로 이루어진 자료구조의 일종을 말한다.
하나의 정점으로부터 시작하여 차례대로 모든 정점들을 한 번씩 방문하는 것을 말한다.
def dfs(graph, start):
visited = [] # 방문한 노드를 저장할 리스트
stack = [start] # 시작 노드를 스택에 저장
while stack:
node = stack.pop() # 스택에서 노드를 꺼냄
if node not in visited:
visited.append(node) # 방문한 노드를 저장
stack.extend(graph[node] - set(visited)) # 방문하지 않은 인접 노드를 스택에 추가
return visited
from collections import deque
def bfs(graph, start):
visited = [] # 방문한 노드를 저장할 리스트
queue = deque([start]) # 시작 노드를 큐에 저장
while queue:
node = queue.popleft() # 큐에서 노드를 꺼냄
if node not in visited:
visited.append(node) # 방문한 노드를 저장
queue.extend(graph[node] - set(visited)) # 방문하지 않은 인접 노드를 큐에 추가
return visited
https://devuna.tistory.com/32
https://velog.io/@lucky-korma/DFS-BFS%EC%9D%98-%EC%84%A4%EB%AA%85-%EC%B0%A8%EC%9D%B4%EC%A0%90
https://velog.io/@gusdh2/DFS-vs-BFS-%EA%B9%8A%EC%9D%B4%EC%9A%B0%EC%84%A0%ED%83%90%EC%83%89-vs-%EB%84%88%EB%B9%84%EC%9A%B0%EC%84%A0%ED%83%90%EC%83%89