너비우선탐색(BFS : Breadth First Search)
- 자노드를 탐색하기 전 같은 위치의 노드를 먼저 탐색하는 방식이다.
- BFS의 시간 복잡도 및 공간 복잡도는 O(nⁿ)이다. ( 주어진 모든 노드를 저장하기 때문 )
- 무한히 깊은 트리에 효과적이다.
[ Fig. 1] BFS 탐색 순서 |
1. 동작 원리
(1) 시작 노드를 큐(Queue)에 삽입한다.
(2) 큐가 비어있다면 수행을 중단한다.
(3) 큐에서 노드를 꺼낸다.
(4) 꺼내온 노드를 기준으로 인접한 정점 중 탐색하지 않은 노드를 탐색한다.
(5) 탐색한 노드를 순차적으로 큐에 삽입한다.
(6) (2 - 5) 과정을 반복한다.
2. 함수 구현
#include <stdio.h> #define MAX 6 typedef struct queue{ int G[MAX][MAX] = // init adjacency matrix void bfs( int); int main( void) /* /* /* /* enqueue( v); // insert a data into the queue. // examine whether the queue is empty or not visit[v] = VISITED; // mark this vertical as VISITED. for( i = 0 ; i < MAX ; i ++) printf("%c에서 %c로 이동\n", vc[v], vc[i]); |
3. 실행 결과
Fig. 1의 그래프를 기준으로 구현한 결과, 이론과 일치하는 순서대로 출력되었다.
'프로그래밍 언어들 > 알고리즘' 카테고리의 다른 글
A* (A star) 알고리즘 (1) | 2016.10.16 |
---|---|
다익스트라(dijkstra) 알고리즘 (0) | 2016.10.14 |
깊이우선탐색(DFS : Depth First Search) (0) | 2016.10.13 |
그래프의 행렬 표현법(Representations of graphs) (0) | 2016.10.13 |
병합 정렬(Merge Sort) (0) | 2016.10.12 |