并查集及其优化【考研笔记】
作者:
李晓晗
,
2022-11-10 14:23:09
,
所有人可见
,
阅读 242
#define MAX_TREE_SIZE 10
typedef struct {
ItemType data;
int parent;
} PTNode;
typedef struct {
PTNode nodes[MAX_TREE_SIZE];
int n;
}PTree;
#define SIZE 10;
int UFSets[SIZE];
void init(int set[]) {
for(int i = 0; i < SIZE; i ++ ) set[i] = -1;
}
int find(int S[], int x) {
while(S[x] >= 0) x = set[x];
return x;
}
void union(int S[], int root1, int root2) {
if (root1 == root2) return;
S[root2] = root1;
}
int find(int S[], int x) {
int root = x;
while(S[root] >= 0) root = S[root];
while(x != root) {
int t = S[x];
S[x] = root;
x = t;
}
return root;
}
void union(int S[], int root1, int root2) {
if (root1 == root2) return;
if (S[root1] > S[root2]) {
S[root2] += S[root1];
S[root1] = root2;
}
else {
S[root1] += S[root2];
S[root2] = root1;
}
}