Depth First Seaarch : 깊이 우선 탐색
그림을 보면 한눈에 차이점이 보이지 않는가?
DFS는 깊게를 우선으로 탐색하고, BFS 넓게를 우선으로 탐색한다.

그래서 DFS는 재귀로 작성할 수 있겠고, BFS는 그렇지 않다.




pop 연산하여 그 노드 부터 탐색함.
계속해서 Visited를 기록해두어 Stack에 중복으로 삽입되어 이미 방문한 노드는 순회하지 않도록 해야한다.
from collections import deque
def dfs(graph, start_node):
visited = []
need_visited = deque()
##시작 노드 설정해주기
need_visited.append(start_node)
## 방문이 필요한 리스트가 아직 존재한다면
while need_visited:
## 시작 노드를 지정하고
node = need_visited.pop()
##만약 방문한 리스트에 없다면
if node not in visited:
## 방문 리스트에 노드를 추가
visited.append(node)
## 인접 노드들을 방문 예정 리스트에 추가
need_visited.extend(graph[node])
return visited
파이썬에서, Stack을 사용하기 위해 deque를 사용하여 pop /append 연산을 사용한다.
인접한 노드들을 아직 방문하지 않았으면, deque에 넣고 visited를 체크하는 모습이다.
need_visited.extend(graph[node]) 코드를 이용하여 갈 수 있는 모든 경로를 삽입하는 모습이다.