[알고리즘] 너비 우선 탐색 (Breath First Search, BFS) - JAVA / 자바
Seunghyun_KO2022. 2. 19. 09:00
728x90
반응형
너비 우선 탐색(Breath First Search, BFS)
: 하나의 정점으로부터 시작하여 인접한 정점들을 우선으로 탐색하여 최종적으로 모든 정점을 탐색하는 방법
특징
① 목표 지점까지 최단 길이(경로)를 보장한다.
② 경로가 길수록 인접한 정점이 많이 생겨나므로(저장되므로) 저장 공간이 많이 필요하다.
③ 선입선출(FIFO, First In First Out) 구조이다.
BFS 알고리즘
① 시작 정점 v를 결정하여 방문 ② 정점 v에 인접한 정점들 중 방문하지 않은 정점을 차례로 방문하면서 큐에 enQueue ③ 방문하지 않은 인접한 정점이 없으면, 방문했던 정점에서 인접한 정점을 다시 차례로 방문하기 위해 큐에서 deQueue 하여 구한 정점에서 ②반복 ④ 큐가 공백이 될 때까지 ②~③반복
BFS(v)
for (i ← 0; i<n; i ← i+1) do {
visited[i] ← false;
}
Q ← createQueue();
visited[v] ← true;
v 방문;
while (not isEmpty(Q)) do {
while (visited[v의 인접정점 w] = false) do {
visited[w] ← true;
w 방문;
enQueue(Q, w);
}
v ← deQueue(Q);
}
end BFS()