본문 바로가기
Algorithm/이론

[그래프의 표현] 인접 리스트

by 우툴 2016. 4. 1.
728x90

인접 리스트

 그래프를 표현하는 방법중의 한가지 방법이다. 즉 링크드 리스트 ( 벡터) 를 사용한 배열로 그래프를 표현해 주는 방법이다.  인접 행렬과 달리 간선의 개수로만 검색하는것이 줄어들기 때문에 검색 속도가 빠르다. 즉 아래의 그래프를 표현해 준다면 다음과 같다.


 어찌보면 인접 행렬이랑 뭐가 다르냐??? 라고 물어볼 수 있는데 그건 탐색의 시간에서 큰 차이를 보인다. 인접행렬의 같은경우는 접점의 개수 x 접점의 개수의 맵을 전부 탐색해야 되지만 인접 리스트는 간선의 개수만 탐색 해도 되기 때문에 차이가 난다. 

왼쪽의 그림이 인접 행렬이고, 오른쪽은 인접 리스트인데 속도 면에서도 횟수의 차이가 명백히 나는 것을 볼 수 있다. 


코드 구현

 인접 리스트를 만드는 코드 구현 같은 경우는 매우 짧고 쉽게 만들 수 있따. 여기서 n은 정점의 개수 m 은 간선의 개수이다. u와 v는 간선의 속성으로 연결된 두 정점을 표현한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <cstdio>
#include <vector>
using namespace std;
vector<int> a[10];
int main() {
    int n, m;
    scanf("%d %d", &n, &m);
    for (int i = 0; i<m; i++) {
        int u, v;
        scanf("%d %d", &u, &v);
        a[u].push_back(v); a[v].push_back(u);
    }
}
cs



728x90

'Algorithm > 이론' 카테고리의 다른 글

[STL] vector 사용하기  (0) 2016.04.04
[STL] pair 사용하기  (1) 2016.04.04
[조합] nCr 쉽게 구하기. (수정 20190604)  (5) 2016.04.03
[그래프의 표현] 인접 행렬  (0) 2016.03.31
[소수 판별법]에라토스테네스의 체  (0) 2016.03.24

댓글