[자료구조] 그래프
그래프는 연결되어 있는 객체 간의 관계를 표현한 자료구조이다.
이전에 다루었던 트리 역시 그래프의 일종이다.
1. 그래프 정의
그래프 G를 (V, E)로 표시한다.
- V는 정점(Vertices)으로 노드(node)라 하며, 여러 특성을 가질 수 있는 객체를 의미한다.
- V(G): 그래프 G의 정점들의 집합
- V(G): 그래프 G의 정점들의 집합
- E는 간선(Edge) 또는 링크(link)라 하며, 정점들 간의 관계를 의미한다.
- E(G): 그래프 G의 간선들의 집합

다음 그림의 두 그래프는 같은 그래프이다.

1. 그래프 종류
그래프는 간선의 종류에 따라 다음의 두 그래프로 나눌 수 있다.
- 무방향 그래프 (undirected graph)
- 간선을 통해서 양방향으로 갈 수 있다.
- (A, B) = (B, A)
- 방향 그래프 (directed graph)
- 간선을 통해서 단방향으로만 갈 수 있다.
- <A, B> != <B, A>

또한 그래프의 간선에 가중치를 넣어서 그래프를 표현할 수 있는데,
이러한 그래프를 가중치 그래프라 한다.
// 간선에 비용(cost)이나 가중치(weight)가 할당된 그래프
3. 그래프 표현 (인접행렬, 연결리스트)
그래프는 인접행렬과, 인접 리스트로 표현이 가능한데
C++ 객체로 구현한 그래프는 DFS, BFS 알고리즘에서 정의하였다.