BFS 알고리즘

이진솔·2022년 2월 10일
1

알고리즘 공부 📒

목록 보기
6/8
post-thumbnail
  • 너비 우선 탐색
  • 가까운 노드부터 우선적으로 탐색
  • 큐 자료구조 이용
  • 최단거리 문제에서 자주 사용
  1. 탐색 시작 노드를 큐에 삽입하고 방문 처리를 함
  2. 큐에서 노드를 꺼낸뒤에 인접 노드중 방문하지 않은 노드를 모두 큐에 삽입하고 방문함
  3. 2번 과정 수행할 수 없을 때가지 반복

탐색 순서 : 1 > 2 > 3 > 8 > 7 > 4 > 5 > 6

from collections import deque

# BFS 함수 정의
def bfs(graph, start, visited):
    # 큐(Queue) 구현을 위해 deque 라이브러리 사용
    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

# 각 노드가 연결된 정보를 리스트 자료형으로 표현(2차원 리스트)
graph = [
  [],
  [2, 3, 8],
  [1, 7],
  [1, 4, 5],
  [3, 5],
  [3, 4],
  [7],
  [2, 6, 8],
  [1, 7]
]

# 각 노드가 방문된 정보를 리스트 자료형으로 표현(1차원 리스트)
#visted 라는 이름의 리스트 생성
visited = [False] * 9

# 정의된 BFS 함수 호출
bfs(graph, 1, visited)```

참조 : 동빈나 유튜브

profile
"Hello Jinsol World"💛

0개의 댓글