[IT]/알고리즘
[알고리즘] 간단한 union-find 알고리즘의 구현(C++)
working_hard
2019. 5. 31. 16:44
728x90
#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;
else
{
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 과 5는 연결되어 있나요?? ";
cout << findParent(parent, 1, 5) << endl;
unionParent(parent, 1, 5);
cout << "1 과 5는 연결되어 있나요?? ";
cout << findParent(parent, 1, 5) << endl;
return 0;
}