아이템(사물 또는 추상적 개념)들과 이들 사이의 연결 관계 포함
정점(Vertex)들의 집합과 이들을 연결하는 간선(Edge)들의 집합으로 구성된 자료구조
선형자료구조나 트리자료구조로 표현하기 어려운 M:N 관계 표현

무향 그래프(Undireted Graph) & 유향 그래프(Directed Graph)
가중치 그래프(Weighted Graph)
순환 그래프(Cycle Graph)
사이클 없는 방향 그래프(DAG, Directed Acyclic Graph)

정점들에 대해 가능한 모든 간선들을 가진 그래프

무향 그래프다.
정점이 n개면 간선은 n*(n-1)/2
두 정점에 간선이 존재(연결됨)하면 서로 인접해 있다.
완전 그래프에 속한 임의의 두 정점들은 모두 인접


간선의 정보를 저장하는 방식, 메모리나 성능을 고려해서 결정
인접 행렬 (Adjacent matrix)
인접 리스트 (Adjacent List)
간선 배열 (Edge Array)
|V| x |V| 정방 행렬
행 번호와 열 번호는 그래프의 정점에 대응
무향 그래프
유향 그래프


장점 : 특정 정점끼리 인접한지 확인하는 것이 인접 리스트보다 빠르다.
단점 : 정점 대비 간선의 개수가 적다면 불필요한 메모리 공간이 낭비된다.

각 정점에 대한 인접 정점들을 순차적으로 표현
하나의 정점에 대한 인접 정점들을 각각 노드로 하는 연결리스트로 저장



장점 : 인접 행렬의 메모리적 문제 해결
단점 : 특정 정점끼리 인접한지 확인하는데 인접행렬보다 오래 걸린다.

1차원 배열로 해도 되고, 2차원 배열로 해도 되고, Edge 클래스를 만들고 안에 int st, int ed를 넣어서 객체지향으로 사용해도 됨.
정점과 정점의 연결 정보인 간선을 배열에 저장
간선을 표현하는 두 정점의 정보를 배열 혹은 객체로 저장할 수 있다