깊이우선 = 스택 나중에들어간것이나옴
넓이우선 = 큐 먼저들어간것이나옴
너비/길이 우선 탐색 정의
https://cyc1am3n.github.io/2019/04/26/bfs_dfs_with_python.html
그래프
https://source-sc.tistory.com/49?category=963452
BFS(Breadth First Search, 너비 우선 탐색)
그래프= 안 리스트 수가 visited*number 수
그래프 안 [ ] 는 각 0~6 인덱 7개를 말한다? (숫자를 7이상으로 주면 많아도 에러가 안난다)
왼쪽그림에서 1인덱 기준 인접한 너비 숫자 3 4 라서 [3,4]
2에서는 인접 너비 노드는 3,5 라서 [3,5]
# deque 라이브러리 불러오기
from collections import deque
# BFS 메서드 정의
def bfs (graph, node, visited):
# 큐 구현을 위한 deque 라이브러리 활용
queue = deque([node])
# 현재 노드를 방문 처리
visited[node] = True
# 큐가 완전히 빌 때까지 반복
while queue:
# 큐에 삽입된 순서대로 노드 하나 꺼내기
v = queue.popleft()
# 탐색 순서 출력
print(v, end = ' ')
# 현재 처리 중인 노드에서 방문하지 않은 인접 노드를 모두 큐에 삽입
for i in graph[v]:
if not (visited[i]):
queue.append(i)
visited[i] = True
graph = [
[], # 0
[3, 4], # 1 너비인접노드
[3, 5], # 2 너비인접노드
[1, 2, 5], # 3 너비인접노드
[1, 6], # 4 너비인접노드
[2, 3], # 5 너비인접노드
[4], # 6 너비인접노드
]
# 노드별로 방문 정보를 리스트로 표현
visited = [False] * 7
# 정의한 BFS 메서드 호출(노드 1을 탐색 시작 노드로 설정)
bfs(graph, 1, visited)
출력 1 3 4 2 5 6
DFS(Depth First Search, 깊이 우선 탐색)