할껀하고놀자

[알고리즘] 간단한 union-find 알고리즘의 구현(C++) 본문

[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;
}
Comments