정점(Vertex)
: 그래프의 구성 요소로 하나의 연결점.간선(Edge)
: 두 정점을 연결하는 선.차수(Degree)
: 정점에 연결된 간선의 수.인접(Adjacency)
: 두 개의 정점에 간선이 존재(연결됨)하는 경우.경로(Path)
: 어떤 정점 A에서 다른 정점 B로 끝나는 순회로 두 정점 사이를 잇는 간선들을 순서대로 나열한 것.싸이클(Cycle)
: 경로의 시작 정점과 끝 정점이 같음.무향 그래프(Undirected Graph)
: 방향이 없음. 양방향.유향 그래프(Directed Graph)
: 방향이 있음. 단뱡향.가중치 그래프(Weighted Graph)
: 간선에 정보(값)을 부여한 그래프.사이클 없는 방향 그래프 그래프(DAG, Directed Acyclic Graph)
: .완전 그래프
: 정점들에 대해 가능한 모든 간선들을 가진 그래프.부분 그래프
: 원래 그래프에서 일부의 정점이나 간선을 제외한 그래프.트리
: 아래 제한을 가지는 그래프.인접 행렬(Adjacent Matrix)
: [V X V] 크기의 2차원 배열을 이용해 간선 정보 저장.인접 리스트(Adjacent List)
: 각 정점마다 다른 정점으로 나가는 간선의 정보 저장.간선 리스트(Edge List)
: 간선(시작 정점, 끝 정점)의 정보를 객체로 표현하여 리스트에 저장.- 두 정점을 연결하는 **간선의 유무**를 `행렬`로 표현 - [V X V] 행렬 - 행 번호와 열 번호는 그래프의 정점에 대응. - 인접하면 1 (가중치가 있다면 가중치도 표현.) - 인접하지 않으면 0 () - 단점 : 정점의 개수 V라면 [V X V] 크기의 행렬로 표현되어 간선의 유무에 따라 의미없이 공간을 차지하는 경우가 생김.
- 각 정점에 대한 **인접 정점**들을 순차적으로 표현 - 하나의 정점에 대한 인접 정점들을 각각 노드로 하는 `연결 리스트`로 저장 - 두 정점에 대한 간선 그 자체를 객체로 표현하여 리스트로 저장. - 간선을 표현하는 두 정점의 정보를 나타냄.
순회
: 비선형적인 그래프로 표현된 모든 자료(정점)을 빠짐없이 탐색하는 것.인접한 정점
들을 차례로 방문. 방문한 정점을 시작점으로 다시 인접한 정점 방문.큐
활용.// G : 그래프.
// v : 시작 정점.
void BFS(G, v){
Queue<T> q = new Queue<T>();
q.offer(v);
// v 방문 예약
while (!q.isEmpty()){
T data = q.poll();
// data 방문
for (data와 연결된 모든 간선){
q.offer(data의 인접 정점);
// 인접 정점 방문 예약.
}
}
}
재귀적
구현 또는 후입 선출 형태의 스택
활용.// G : 그래프.
// v : 탐색 정점
void DFS(v){
// v 방문 설정.
for (v와 연결된 모든 간선){
if (아직 방문하지 않은 정점 newV){
DFS(newV)
}
}
}