from collections import deque
def bfs(adj_matrix, start_node):
num_nodes = len(adj_matrix)
visited = [False] * num_nodes # 방문한 노드를 표시하기 위한 배열
queue = deque() # 큐 생성
queue.append(start_node) # 시작 노드를 큐에 추가
visited[start_node] = True # 시작 노드를 방문 표시
while queue:
current_node = queue.popleft() # 큐에서 노드를 꺼내옴
print(current_node) # 노드 방문 순서를 출력하거나 다른 작업 수행
for next_node in range(num_nodes):
# 현재 노드와 연결된 인접한 노드를 찾음
if adj_matrix[current_node][next_node] == 1 and not visited[next_node]:
queue.append(next_node) # 큐에 추가
visited[next_node] = True # 방문 표시
from collections import deque
def bfs(adj_list, start_node):
num_nodes = len(adj_list)
visted = [False] * num_nodes # 방문한 노드를 표시하기 위한 배열
queue = deque() # 큐 생성
queue.append(start_node) # 시작 노드를 큐에 추가
visted[start_node] = True # 시작 노드를 방문 표시
while queue:
current_node = queue.popleft() # 큐에서 노드를 꺼내옴
print(current_node) # 노드 방문 순서를 출력하거나 다른 작업 수행
for next_node in adj_list[current_node]:
if not visited[next_node]:
queue.append(next_node) # 큐에 추가
visited[next_node] = True # 방문 추가
루트 노드에서 시작해서 다음 분기로 넘어가기 전에 해당 분기(branch)를 완벽하게 탐색하는 방법
def dfs(adj_matrix, start_node):
num_nodes = len(adj_matrix)
visited = [False] * num_nodes # 방문한 노드를 표시하기 위한 배열
stack = []
stack.append(start_node) # 시작 노드를 스택에 추가
visited[start_node] = True # 시작 노드를 방문 표시
while stack:
current_node = stack.pop() # 스택에서 노드를 꺼냄
print(current_node) # 노드 방문 순서를 출력하거나 다른 작업을 수행
for next_node in range(num_nodes):
# 현재 노드와 연결된 인접한 노드를 찾음
if adj_matrix[current_node][next_node] == 1 and not visited[next_node]:
stack.append(next_node) # 스택에 추가
visited[next_node] = True # 방문 표시
def dfs(adj_matrix, current_node, visited):
visited[current_node] = True # 현재 노드를 방문 표시
print(current_node) # 노드 방문 순서를 출력하거나 다른 작업을 수행
for next_node in range(len(adj_matrix[current_node])):
# 현재 노드와 연결된 인접한 노드를 찾음
if adj_matrix[current_node][next_node] == 1 and not visited[next_node]:
# 재귀 호출
dfs(adj_matrix, next_node, visited)
# 인접행렬
adj_matrix = [
[0, 1, 1, 0, 0],
[1, 0, 0, 1, 1],
[1, 0, 0, 0, 1],
[0, 1, 0, 0, 0],
[0, 1, 1, 0, 0]
]
num_nodes = len(adj_matrix)
# 방문한 노드를 표시하기 위한 배열
visited = [False] * (num_nodes)
# 각 노드를 시작 노드로 하여 DFS 수행
for start_node in range(num_nodes):
if not visited[start_node]:
dfs(adj_matrix, start_node, visited)
def dfs(adj_list, stack_node):
num_nodes = len(adj_list)
visited = [False] * num_nodes # 방문한 노드를 표시하기 위한 배열
stack = [] # 스택 생성
stack.append(start_node) # 시작 노드를 스택에 추가
while stack:
current_node = stack.pop() # 스택에서 노드를 꺼내옴
if not visited[current_node]:
visited[current_node] = True # 방문 표시
print(current_node) # 노드 방문 순서를 출력하거나 다른 작업을 수행
for next_node in adj_list[current_node]:
if not visited[next_node]:
stack.append(next_node) # 스택에 추가
# 인접리스트
adj_list = [
[1, 2],
[0, 3, 4],
[0, 4],
[1],
[1, 2]
]
num_nodes = len(adj_list)
# 각 노드를 시작 노드로 하여 DFS 수행
for start_node in range(num_nodes):
dfs(adj_list, start_node)
def dfs(adj_list, current_node, visited):
visited[current_node] = True # 현재 노드를 방문 표시
print(current_node) # 노드 방문 순서를 출력하거나 다른 작업을 수행
for next_node in adj_list[current_node]:
if not visited[next_node]:
dfs(adj_list, next_node, visited) # 재귀 호출
# 인접리스트
adj_list = [
[1, 2],
[0, 3, 4],
[0, 4],
[1],
[1, 2]
]
num_nodes = len(adj_list)
visited = [False] * num_nodes # 방문한 노드를 표시하기 위한 배열
# 각 노드를 시작 노드로 하여 DFS 수행
for start_node in range(num_nodes):
if not visited[start_node]:
dfs(adj_list, start_node, visited)
https://namu.wiki/w/%EA%B9%8A%EC%9D%B4%20%EC%9A%B0%EC%84%A0%20%ED%83%90%EC%83%89
https://namu.wiki/w/%EB%84%88%EB%B9%84%20%EC%9A%B0%EC%84%A0%20%ED%83%90%EC%83%89