Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 딥러닝
- 영상처리
- 컴퓨팅사고
- 코딩테스트
- 삼성코딩테스트
- 자료구조
- 다이나믹프로그래밍
- dfs문제
- tflite
- DP문제
- 코테 문제
- 삼성역량테스트
- DP
- 포스코 AI교육
- 초소형머신러닝
- BFS
- 그리디
- 코테
- 임베디드 딥러닝
- MCU 딥러닝
- 포스코 교육
- TensorFlow Lite
- dfs
- bfs문제
- tinyml
- 삼성역테
- 알고리즘
- 삼성코테
- 포스코 ai 교육
- sort
Archives
- Today
- Total
코딩뚠뚠
[기본문제풀이] union_find 본문
반응형
풀이 일시 : 2020-08-06
합집합찾기 :
대표적인 그래프알고리즘이며 서로소집합 알고리즘이라고도 한다. 여러개의 노드가 존재할 때 두개의 노드를 선택해서 현재 이 두 노드가 서로 같은 그래프에 속하는지 판별하는 알고리즘이다.
문제 :
union find로 연결여부를 판단한다.
풀이 :
연결되어있다면 같은 부모를 갖게끔 초기화 해준다. 소속을 같게 해준다.
#include <stdio.h>
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;
} //각자의 parent를 각자의 수로 초기화한다.
unionParent(parent, 1, 2);
unionParent(parent, 2, 3);
unionParent(parent, 3, 4);
unionParent(parent, 5, 6);
unionParent(parent, 6, 7);
unionParent(parent, 7, 8);
printf("1과 5는 연결되어있나요? %d\n", findParent(parent, 1, 5));
unionParent(parent, 1, 5);
printf("1과 5는 연결되어있나요? %d\n", findParent(parent, 1, 5));
}
반응형
'알고리즘 문제풀이 > 기본문제풀이' 카테고리의 다른 글
[기본문제풀이] dynamic_programming (0) | 2020.12.28 |
---|---|
[기본문제풀이] traversal (0) | 2020.12.28 |
[기본문제풀이] kruskal_algorithm (0) | 2020.12.28 |
[기본문제풀이] queue (0) | 2020.12.28 |
[기본문제풀이] stack (0) | 2020.12.28 |