728x90
Union-Find 알고리즘이란?
대표적인 그래프 알고리즘으로 '합집합 찾기'라는 의미를 가진 알고리즘입니다. 서로소 집합(Disjoint-Set) 알고리즘이라고도 부릅니다. 여러 개의 노드가 존재할 때 두 개의 노드를 선택해서, 선택된 두 노드가 서로 같은 그래프 상에 속해 있는지 판별하는 알고리즘입니다.
구현된 함수로는 조상 노드를 찾는 getParent(재귀함수로 구현)함수와 합집합해주는 unionParent함수 그리고 두 노드가 같은 그래프에 있는지 확인해주는 findParent함수가 있습니다.
//보통 union find 알고리즘을 사용할 때 갱신을 작은 수쪽으로 수정해줍니다.
//parent 찾기
int getParent(int parent[], int x) {
if (parent[x] == x)return x;
return parent[x] = getParent(parent, parent[x]);
}
//두 노드를 연결
void unionParent(int parent[], int a, int b) {
a = getParent(parent, a);
b = getParent(parent, b);
if (a < b) parent[b] = a;
else parent[a] = b;
}
//두 노드가 같은 그래프에 존재하나? 존재하면 1, 아니면 0 반환
int findParent(int parent[], int a, int b) {
a = getParent(parent, a);
b = getParent(parent, b);
if (a == b) return 1;
else return 0;
}
728x90
'🥇Baekjoon Solutions > Union-Find & 크루스칼 알고리즘' 카테고리의 다른 글
[C++] 백준 20040번: 사이클 게임 (0) | 2021.08.23 |
---|---|
[C++] 크루스칼 알고리즘(Kruskal Algorithm, 최소 스패닝 트리-MST) 개념 (0) | 2021.08.23 |
[C++] 백준 4386번: 별자리 만들기 (0) | 2021.08.19 |
[C++] 백준 4195번: 친구 네트워크 (0) | 2021.08.19 |
[C++] 백준 1976번: 여행 가자 (0) | 2021.08.19 |
댓글