그래프
빠른 설명
그래프는 정점(vertex)과 간선(edge)으로 이루어진 자료구조다. 사람 관계, 길, 이동 가능 상태, 선후 관계를 표현할 때 사용한다.
표현 방법
- 인접 리스트: 연결된 정점만 저장한다. 보통 가장 많이 쓴다.
- 인접 행렬: 배열로 연결 여부를 저장한다. 정점 수가 작을 때 편하다.
시간복잡도 감각
- 인접 리스트 전체 순회:
- 인접 행렬 전체 확인:
참고자료
C++ 코드
#include <algorithm>
#include <deque>
#include <functional>
#include <iostream>
#include <queue>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;
int main() {
int n = 4;
vector<vector<int>> graph(n);
auto add_edge = [&](int a, int b) {
graph[a].push_back(b);
graph[b].push_back(a);
};
add_edge(0, 1);
add_edge(0, 2);
add_edge(1, 3);
for (int v = 0; v < n; v++) {
cout << v << ": ";
for (int next : graph[v]) cout << next << ' ';
cout << '\n';
}
}Python 코드
n = 4
graph = [[] for _ in range(n)]
def add_edge(a, b):
graph[a].append(b)
graph[b].append(a)
add_edge(0, 1)
add_edge(0, 2)
add_edge(1, 3)
for v in range(n):
print(v, ":", graph[v])