:: ADVANCE ::
[MST] 크루스칼 알고리즘 본문
반응형
[MST] 크루스칼 알고리즘
Kruskal Algorithm
최소 스패닝 트리 구하는 알고리즘 중 하나
다른 알고리즘으로는 Prim (프림) 알고리즘이 있다
최소 스패닝 트리는
사이클을 형성하지 않고 가장 적은 가중치로 이루어진 트리이다
크루스칼은 간선을 기준으로 트리를 형성해 나가는 알고리즘이다.
자세한 설명은 [참고] 이 곳이 설명이 자세하고 그림이 있어 이해하기 좋다
크루스칼은 dfs 또는 Union-find을 이용하여 구현할 수 있다
코드를 간단하게 하고 싶어서 Union-find을 이용하여 구현해 보았다.
간선을 오름차순으로 정렬하여야 하는데 입력받을 때 priority_queue에 넣어서 따로 정렬을 해주지 않았다.
만약 C로 구현할 필요가 있다면 구조체를 선언하고, 정렬알고리즘을 따로 구현하기만 하면 된다. vector도 그냥 배열에 추가하는 방식으로 수정
priority_queue는 기본 내림차순 정렬되어 있기 때문에 -1을 곱해주어 거꾸로 정렬되게 하였다.
간선이 작은 순으로 queue에서 꺼내서 간선과 연결된 정점들이 같은 set을 형성하는지 확인한 후에 아니라면 그 둘을 연결시켜 준다.
반응형
'Algorithm > Algorithm' 카테고리의 다른 글
가장 긴 증가하는 부분수열 (0) | 2017.05.07 |
---|---|
[순열과 조합] 순열과 조합 알고리즘 (0) | 2017.05.07 |
[Bit] bit 개수 세는 함수 (0) | 2016.10.12 |
[BitMask] 에라토스테네스의 체 (0) | 2016.07.17 |
[STL] vector (0) | 2016.07.04 |
Comments