티스토리 뷰
1. 개요
[그림 1] 인접행렬로 나타낸 그래프
그래프 자료구조를 나타내는 방법으로 두 가지가 있다. 하나는 인접 행렬 (adjacent Matrix) 이고 하나는 인접 리스트 (adjacent List)법이있다. 이번 글에서는 인접행렬로 그래프를 나타내는 방법을 알아보겠다.
인접행렬법은 배열로 그래프를 나타내는 것이므로 밀집그래프 (완전그래프)를 표현하는데 적절하다. 2차원 배열 특성상 한번에 메모리를 잡아햐 하기때문에 빈 공간이 생기면 메모리 낭비가 생기므로 밀집그래프를 표현하는데 있어 좋은 방법이다.
(※무방향 그래프를 표현 시 대칭성을 고려해야 한다.)
2. 그래프 구현
3. 깊이우선탐색 ( DFS )
[그림 2] 깊이우선탐색 순서
그래프내의 각 정점들을 간선을 타고 중복없이 한 번씩 방문하는 방법으로 깊이 우선 탐색 ( Depth First Search ) 법과 너비 우선 탐색 ( Breadth First Search)법이 있다. 무방향 그래프는 특성상 방향이 없기때문에 순회 순서가 유일하지 않다는 특징이 있다.
2가지 중 하나인 "깊이 우선 탐색(DFS)" 는 탐색을 시작할 정점에 연결된 정점 중 하나를 선택하여 들어가고 그 하나와 연결된 정점들 중 또 하나를 선택해서 들어가고 깊이 들어가는 방식으로 탐색하는 기법이다.
DFS의 과정은 스택을 사용하므로 재귀와 비재귀로 구현 할 수 있다.
< 재귀법 >
< 비재귀 >
4. 너비우선탐색 ( BFS )
[그림 3] 너비우선탐색 순서
너비우선탐색 (BFS) 는 시작한 정점과 연결된 모든 정점을 탐색하고 다시 시작 정점의 다른 연결된 정점을 찾는 순으로, 깊이 들어가기전에 옆으로 넓게 퍼지며 탐색하는 기법이다. DFS와 달리 너비우선탐색 (BFS) 는 스택을 사용하지않고 큐 자료구조를 이용해야 한다. 따라서 재귀호출기법으로는 구현할 수 없다.
번외로 그래프 내의 연결 요소별로 정점들을 출력하고 연결 요소의 개수를 리턴하는 함수를 구현해보았다.
'프로그래밍 > 자료구조' 카테고리의 다른 글
5. 그래프 (Graph) - 인접리스트법 (0) | 2016.08.23 |
---|---|
4. 이진 트리 (Binary Tree) (0) | 2016.08.23 |
3. 원형 큐 (Circular Queue) (0) | 2016.08.22 |
2. 스택 (Stack) (0) | 2016.08.22 |
1. 링크드 리스트 (Linked List) (0) | 2016.08.22 |