자기개발👨💻/코딩 알고리즘
Union-Find
천숭이
2022. 5. 16. 15:09
https://baebalja.tistory.com/317
[백준 1197번 / C++ / 크루스칼] 최소 스패닝 트리
MST 그래프를 구하기 위해서는 크루스칼과 프림 알고리즘이 존재하는데 이번 문제에서는 크루스칼을 이용해서 구현하였다. 해당 문제를 글로 설명하기에는 개념적인 부분이 많이 필요하기 때문
baebalja.tistory.com
https://m.blog.naver.com/ndb796/221230967614
17. Union-Find(합집합 찾기)
Union-Find(유니온-파인드)는 대표적인 그래프 알고리즘입니다. 바로 '합집합 찾기'라는 의미를 가진 알...
blog.naver.com
#include <iostream>
using namespace std;
// 재귀로 구성
// 최종 부모 노드를를 찾기 위한 작업
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;
}
int findParent(int parent[], int a, int b){
a = getParent(parent, a);
b = getParent(parent, b);
if (a==b) return 1; // 부모가 같으면연결되어 있음
return 0; // 부모가 다르므로 연결되어 있지 않음
}
int main(){
int parent[11];
for (int i=1;i<=10;i++){
parent[i] = i; // 자기 자신으로 초기화
}
unionParent(parent, 1, 2);
unionParent(parent, 2, 3);
unionParent(parent, 3, 4);
unionParent(parent, 5, 6);
unionParent(parent, 6, 7);
unionParent(parent, 7, 8);
cout << "1과 4가 연결되어있습니까? " << findParent(parent,1,4) << "\n"; // yes
cout << "1과 5가 연결되어있습니까? " << findParent(parent,1,5);
}