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);
}
'자기개발👨💻 > 코딩 알고리즘' 카테고리의 다른 글
이진탐색 문제리스트 (0) | 2022.05.27 |
---|---|
위상정렬 문제 리스트 (0) | 2022.05.22 |
[C++] 백준 1197 최소 스패닝 트리 (0) | 2022.05.17 |
[C++] 백준 2606 바이러스 (0) | 2022.05.14 |
[C++] 백준 9372 상근이의 여행 (0) | 2022.05.14 |
최소신장트리 문제 리스트 (0) | 2022.05.14 |