高级数据结构—并查集
原理:参考趣学数据结构
代码:
#include<stdio.h>
#include<stdlib.h>
#define N 100
int father[N];
int find(int x) {if (x != father[x]) {father[x] = find(father[x]);}return father[x];
}
void merge(int x1, int x2) {int p = find(x1);int q = find(x2);if (p == q) {return ;}else if (p > q) {father[x1] = q;}else {father[x2] = p;}return;
}
int main() {printf("输入元素的个数:");int n;scanf_s("%d",&n);for (int i = 1; i <=n; i++) {father[i] = i;}int e1, e2;printf("输入有关系的元素对:\n");int eNumber;scanf_s("%d", &eNumber);for (int i = 0; i < eNumber; i++) {scanf_s("%d%d", &e1, &e2);merge(e1, e2);}printf("判断二个人是否有亲戚关系:\n");scanf_s("%d%d", &e1, &e2);int p = find(e1), q = find(e2);if (p == q) {printf("%d和%d二个人有亲戚关系:\n",e1,e2);}else {printf("%d和%d二个人没有亲戚关系:\n", e1, e2);}system("pause");return 0;
}
测试截图:
时间复杂度O(elogn),空间复杂度O(1)
如果存在什么问题,欢迎批评指正!谢谢!