정점과 정점 사이를 연결하는 간선으로 이루어진 비선형 자료구조이다.
정점 집합과 간선 집합으로 표현 가능하다. 정점은 node, 간선은 edge라고도 부른다.

실제 사례로 쓰이는 경우는 지하철 노선도 같은 지도나 페이지 랭크에서 쓰인다.
간선으로 이어진 정점끼리는 양방향으로 이동이 가능하다.
(A, B)와 (B, A)는 같은 간선으로 취급된다.
예) 양방향 통행 도로

간선에 방향성이 존재하는 그래프이다.
양방향으로 갈 수 있어도 <A, B>와 <B, A>는 다른 간선으로 취급된다.
예) 일방 통행 도로

모든 정점이 서로 이동 가능한 상태의 그래프
어느 한 정점이라도 동 떨어져 있으면 안된다.

특정 정점쌍 사이에 간선이 존재하지 않는 그래프

모든 정점끼리 연결되어 있는 그래프
완전 그래프의 간선 갯수 : 정점의 갯수가 n개 일 때 n(n-1)개

그래프의 정점과 간선의 부분 집합에서 순환이 되는 부분

인접 행렬, 인접 리스트 두 가지 방식으로 그래프를 표현 가능하다.
인접 행렬은 2차원 배열 구현 가능하며 인접 리스트는 연결 리스트로 구현 가능하다.

const graph = Array.from(
Array(5),
() => Array(5).fill(false)
);
// 각 간선을 연결하면 true로 표현
// 가중치를 두고 싶으면 null과 특정 값을 부여하면 된다.
// 무방향 그래프일 경우에는 배열 값을 대칭적으로 추가한다.
graph[0][1] = true;
graph[0][3] = true;
graph[1][2] = true;
graph[2][0] = true;
graph[2][4] = true;
graph[3][2] = true;
graph[4][0] = true;

배열을 만든 후 간선을 배열에 추가하면 된다.

const graph = Array.from(
Array(5),
() => []
);
// 각 간선을 각 정점 배열에 추가한다.
graph[0].push(1);
graph[0].push(3);
graph[1].push(2);
graph[2].push(0);
graph[2].push(4);
graph[3].push(2);
graph[4].push(0);

😅 해당 내용은 공부하면서 정리한 글입니다. 틀린 부분이나 오해하고 있는 부분이 있다면 피드백 부탁드립니다.