자료구조와 알고리즘/이것이 취업을 위한 코딩테스트다

알고리즘 - BFS(Breadth-First Search)

얄루몬 2021. 8. 20. 16:50

https://youtu.be/7C9RgOcvkvo?list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&t=2113 

- 큐 자료구조를 이용한다는 것이 특징이다.

- 인접 노드를 한 번에 큐에 넣고 방문처리 한다는 것이 너비 우선 탐색 BFS의 특징이다.

- 특정 조건에서의 최단경로를 찾는 방법에서 가장 효과적으로 쓰이는 알고리즘이다.

 

<BFS의 동작 예시>

- 무방향 그래프

Step 1 시작 노드인 1을 큐에 삽입하고 방문 처리를 한다.

Step 2 큐에서 노드 1을 꺼내 방문하지 않은 인접 노드 2, 3, 8을 큐에 삽입하고 방문 처리 한다.

Step 3 큐에서 노드 2를 꺼내 방문하지 않은 인접 노드 7(1은 이미 방문했기 때문에 방문하지 않는다.)을 큐에 삽입하고 방문 처리 한다.

from collections import deque

#BFS 메서드 정의

def bfs(graph, start, visited):
    # 큐 구현을 위해 덱 라이브러리를 사용
    queue = deque([start])

    # 현재 노드를 방문처리한다.
    visited[start] = 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 = [[],[2,3,8],[1,7],[1,4,5],[3,5],[3,4],[7],[2,6,8],[1,7]]

visited = [False] * 9
bfs(graph,1,visited)