
from collections import deque
def bfs(graph, start):
visited = set() # 방문한 노드 기록
queue = deque([start]) # BFS를 위한 큐 초기화
visited.add(start)
while queue:
node = queue.popleft() # 큐에서 노드 하나를 꺼냄
print(node, end=" ") # 노드 처리 (여기선 출력)
# 현재 노드의 인접 노드 중 방문하지 않은 노드를 큐에 추가
for neighbor in graph[node]:
if neighbor not in visited:
queue.append(neighbor)
visited.add(neighbor)
# 그래프 예제 (인접 리스트)
graph = {
1: [2, 3],
2: [4, 5],
3: [6],
4: [],
5: [6],
6: []
}
# BFS 실행
bfs(graph, start=1)
동작 원리
출력 결과
위 그래프에서 start=1로 BFS를 실행하면 다음과 같은 순서로 탐색:
1 2 3 4 5 6
def dfs_stack(graph, start):
visited = set() # 방문한 노드 기록
stack = [start] # 스택 초기화
while stack:
node = stack.pop() # 스택에서 노드 꺼냄
if node not in visited:
visited.add(node) # 노드 방문 처리
print(node, end=" ") # 노드 처리 (여기선 출력)
# 인접 노드를 스택에 추가 (역순으로 넣으면 올바른 순서 탐색 가능)
for neighbor in reversed(graph[node]):
if neighbor not in visited:
stack.append(neighbor)
# 실행
dfs_stack(graph, start=1)
출력결과
1 3 6 2 5 4
작동 원리 이해 후 다양한 코딩 문제에 적용시키기