#너비우선탐색, 길이우선탐색

BABY CAT·2022년 10월 17일
0

definition

목록 보기
14/16

깊이우선 = 스택 나중에들어간것이나옴
넓이우선 = 큐 먼저들어간것이나옴

너비/길이 우선 탐색 정의
https://cyc1am3n.github.io/2019/04/26/bfs_dfs_with_python.html

그래프
https://source-sc.tistory.com/49?category=963452

1. 너비우선탐색

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

2. 길이우선탐색

DFS(Depth First Search, 깊이 우선 탐색)

0개의 댓글