오래 못 할 짓 하지 않기

[ 알고리즘 ] 11. BFS 본문

3학년 1학기/알고리즘 (Algorithm)

[ 알고리즘 ] 11. BFS

쫑알bot 2024. 4. 26. 12:08
728x90

Graph Traversal

: Graph G에 있는 모든 Vertex를 방문하는 것이다.

  ● 모든 Vertex

  ● 한 번만

 

방문하는 알고리즘 2가지

1) BFS ( Breadth First Search ) - QUEUE 로 구현

2) DFS  ( Depth First Search )   - STACK으로 구현 

 


BFS ( Breadth First Search )

(Tree 형태 기준) Level Order 방식

 

Root 로 설정한 노드에서 연결되어있는 노드들을 Discover 하고 , 그 사이에 있는 Edge를 Explore 했다고 할 수 있다.

+ Discover and Explore의 기준은 목적지에 있는 노드가 Discover 되지 않았을 때

 

 

1. Root 노드인 A → 연결되어있는 B,C 를 (알파벳)순서대로 Discover , 그 사이에 있는 Edge들을 Explore

2. B가 연결되어있는 D 를 Discover , 그 사이에 있는 Edge를 Explore.

 

모든 Vertex 들어가기 완료

 

+ B,C는 연결되어있지만 둘 다 Discovered 상태이므로 그 사이에 있는 Edge는 Explore되지 않는다.

 

 

 


이번 챕터에서는 Vertex의 색으로 구분을 한다.

 

White = Dicover 되지 않은 Vertex

= 모든 Vertex의 기본값

 

 

Gray = Discover는 되었지만 탐사하지 않은 Vertex

   + White vertex와 인접해있음 + (인접 and White) 였던 애들이 Black으로 되면 같이 Black으로 됨

 

 

Black = Dicover 되고 Child가 없으면 (= 끝났으면 ) 바뀐다.

 = 아래로는 Black , 위로는 Gray와 인접할 것이다.

 


BFS 알고리즘

 

1. White Vertex를 Dicover 했다.

   ▶ 해당 Vertex를 Gray로 바꾼다.

   ▶ 인접한 White Vertex를 Discover한다.

 

2. 인접한 모든 Vertex를 Discover 했다면

   ▶ 자기 자신을 Black으로 바꾼다. 

 

 

 

 


분석

 

 

코드를 2부분으로 나눠서 보면

 

● For 부분 : 초기화  

   > Src vertex만 Gray, 나머지는 White

   > 모든 Distance = 무한대

   > 모든 vertex는 자신의 부모 노드가 없다는 걸 설정함.

       = 부모 자식관계가 아니라 인접한 관계로 만들어둠.

 

 

While 부분 : Traversal

   > Q에 있는 거 하나 꺼냄 = u

 

      > u 에 인접한 vertex들로 반복문을 돌린다.

           >White vertex면 Gray로 바꿈

           > 해당 vertex의 Distance = d[u] +1

           > 해당 vertex의 부모  = u

           > 해당 vertex 를 Queue에 넣음

 

    반복이 끝나면 = 인접한 거 다 봤으면 u = Black

 


예제

 

 

BFS문제를 풀 때는

Vertex는 섬

Edge는 다리 라고 생각하면 이해가 쉽다.

 

Root 섬에서 사람'들'이 동시에 한 다리씩 건너면서 이동한다. ( 각자 가고싶은, 갈 수 있는 곳으로 감 )

 

 

초기화 단계

 

 

1번 실행
인접한 노드 방문 후 - > 거리 1추가 + 회색으로 변경

S는 인접한 게 없으므로 Black으로 변경

 

이 흐름으로 계속 가면 된다.

▼ 

더보기

2번 실행

 

 

 

3번 실행

 

 

4번 실행

 

결론적으로 x-u , y-u 다리는 건너지 않는다.

 

최종 Search 후 vertex에 있는 Distance들과 Edge를 고려해서 Tree로 만들 수 있다.

 

 

 


예제 2

 

풀어보기▼

 

 

 

 

(출처)

한동대학교 용환기 교수님 - 알고리즘