BFS ( Breadth-First Search )
BFS는 그래프 탐색 알고리즘 중 하나로,
루트 노드에서 시작해서 인접한 노드를 모두 우선 탐색한 후에
그 인접한 노드들의 인접한 노드를 다시금 차례로 탐색해나가는 방식으로 동작한다.
즉, 레벨 순서대로 탐색하는 알고리즘이다.
Queue는 먼저 집어넣은 데이터가 먼저 나오는 선입선출(FIFO)의 구조를 가지므로,
BFS에서는 먼저 방문한 노드를 큐에 삽입하고 해당 노드와 인접한 노드들을
모두 큐에 삽입한 후에 큐에서 노드를 꺼내서 방문을 진행한다.
BFS를 이용해 탐색하는 방법은 다음과 같다.
- Java Code
/* BFS : Breadth First Search */
static final int MAX_N = 10;
static int E, N;
static int Graph[][] = new int[MAX_N][MAX_N];
static void bfs(int node) {
boolean visited[] = new boolean[MAX_N];
// 자바 자료형중 하나인 Queue. Queue 는 보통 LinkedList 를 사용해야한다.
Queue<Integer> myQueue = new LinkedList<>();
// 방문했다는 의미의 true
visited[node] = true;
// 큐에 현재 node 삽입
myQueue.add(node);
// 큐가 빌 때 까지 무한반복
while(!myQueue.isEmpty()) {
// 큐에서 값을 꺼내 임시변수에 저장
int curr = myQueue.remove();
System.out.print(curr + " ");
for (int next = 0; next < N; ++next) {
if (!visited[next] && Graph[curr][next] != 0) {
visited[next] = true;
myQueue.add(next);
}
}
}
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
E = scan.nextInt();
N = scan.nextInt();
for (int i = 0; i < E; i++) {
int u = scan.nextInt();
int v = scan.nextInt();
Graph[u][v] = Graph[v][u] = 1;
}
bfs(0);
}