728x90
그래프의 역사
- 쾨니히스베르크의 다리 문제 : 모든 다리를 한 번씩만 건너서 처음 출발하는 장소로 돌아올 수 있는가 -> 불가능하다는 것을 밝혀낸 것이 그래프의 역사와 관련이 있음
- 지역을 정점, 다리를 간선이라고 말함
- 정점 별로 연결된 간선의 수가 짝수여야 한번씩만 지나서 돌아올 수 있음
- 그래프는 정점과 간선으로 표현하는 방법을 가르킴
그래프의 종류
- 무방향 그래프 : 방향성이 없는 그래프
-> 우측과 같이 정점이 모두 연결된 그래프를 완전 그래프라고 함
- 방향 그래프 : 방향성이 있는 그래프
- 가중치 그래프 : 간선에 가중치를 담아서 표현
- 부분 그래프 : 일부 정점과 간선으로 구성된 그래프
그래프의 집합 표현
- 정점의 집합을 V(G), 간선의 집합을 E(G)로 표현
- 방향성이 없는 경우 괄호로 묶고, 방향성이 있는 경우 부등호로 묶고 간선의 시작 부분을 먼저 표현
그래프의 ADT
- 초기화 : 인자로 정점의 수를 전달
void GraphInit(UALGraph* pg, int nv);
- 소멸
void GraphDestory(UALGraph* pg);
- 간선 추가
void AddEdge(UALGraph* pg, int fromV, int toV);
- 간선 정보 출력
void ShowGraphEdgeInfo(UALGraph* pg);
- 정점 정보는 enum으로 상수화
enum {A,B,C,D,E};
enum {SEOUL, INCHEON, DAEGU, BUSAN};
그래프의 구현 방법
- 인접 행렬 기반
-> 정점의 수만큼 2차원 배열을 만들어 연결 정보를 표현
-> 방향성이 있을 경우 도착 정점에만 표현을 해줌
- 인접 리스트 기반
-> 정점별로 연결 리스트를 형성하여 연결된 정점 정보를 표현
-> 방향성이 있을 경우 도착 정점만 표현을 해줌
728x90
'Programming > Data Structure' 카테고리의 다른 글
열혈 자료구조 - 14.3 그래프의 탐색(1) (0) | 2021.01.24 |
---|---|
열혈 자료구조 - 14.2 인접 리스트 기반의 그래프 구현 (0) | 2021.01.24 |
열혈 자료구조 - 13.2 충돌 문제의 해결책 (0) | 2021.01.21 |
열혈 자료구조 - 13.1 빠른 탐색을 보이는 해쉬 테이블 (0) | 2021.01.19 |
열혈 자료구조 - 12.2 균형 잡힌 이진 트리 : AVL 트리의 구현 (0) | 2021.01.17 |