그래프 탐색 - BFS

그래프 탐색(순회)

그래프 순회는 비선형 구조인 그래프로 표현된 모든 자료(정점)를 빠짐없이 탐색하는 것을 의미한다.

두가지 방법

AdjMatrixTest.java

  • 너비 우선 탐색(Breadth First Search, BFS)
  • 깊이 우선 탐색(Depth First Search, DFS)

너비 우선 탐색은 탐색 시작점의 인접한 정점들을 먼저 모두 차례로 방문 후에, 방문했던 정점을 시작점으로 하여 다시 인접한 정점들을 차례로 방문하는 방식
인접한 정점들에 대해 탐색을 한 후, 차례로 다시 너비우선 탐색을 진행해야 하므로, 선입선출 형태의 자료구조인 큐를 활용함

BFS 알고리즘

입력 파라미터 : 그래프 G와 탐색 시작 정점

BFS(G, v) // 그래프 G, 탐색 시작 정점 v
   생성
  시작 정점 v를 큐에 삽입
  정점 v를 방문한 것으로 표시
  while(큐가 비어 있지 않은 경우) {
    t <- 큐의 첫번재 원소 반환
    for(t와 연결된 모든 간선에 대해){
      u <- t의 인접 정점
      u가 방문되지 않은 곳이면,
      u를 큐에 넣고, 방문한 것으로 표시
    }
  }
end BFS()

그래프 탐색 - DFS

DFS 알고리즘

재귀

G : 그래프
DFS(v) // v: 탐색 정점
  visited[v] <- true // v 방문 설정
  For each all w in adjacency(G, v) // 인접 정점
    If visited[w] != True // 방문하지 않았다면
      DFS(w)