#pragma once
#ifndef DISJOINTSET_H
#define DISJOINTSET_H
#include <stdio.h>
#include <stdlib.h>
typedef struct tagDisjointSet {
struct tagDisjointSet * Parent;
void* Data;
}DisjointSet;
void UnionSet(DisjointSet* Set1, DisjointSet* Set2);
DisjointSet* FindSet(DisjointSet* Set);
DisjointSet* MakeSet(void* NewData);
void DestroySet(DisjointSet* Set);
#endif
=============================================================================
#include "disjointSet.h"
void UnionSet(DisjointSet* Set1, DisjointSet* Set2) {
Set2 = FindSet(Set2);
Set2 -> Parent = Set1;
}
DisjointSet* FindSet(DisjointSet* Set) {
while (Set->Parent != NULL)
Set = Set->Parent;
return Set;
}
DisjointSet* MakeSet(void* NewData) {
DisjointSet* NewSet = (DisjointSet*)malloc(sizeof(DisjointSet));
NewSet->Data = NewData;
NewSet->Parent = NULL;
return NewSet;
}
void DestroySet(DisjointSet* Set){
}
void main() {
int a = 1, b = 2, c = 3, d = 4;
DisjointSet* Set1 = MakeSet(&a);
DisjointSet* Set2 = MakeSet(&b);
DisjointSet* Set3 = MakeSet(&c);
DisjointSet* Set4 = MakeSet(&d);
printf("Set1 == Set2 : %d\n", FindSet(Set1) == FindSet(Set2));
UnionSet(Set1, Set3);
printf("Set1 == Set3 : %d\n", FindSet(Set1) == FindSet(Set3));
UnionSet(Set3, Set4);
printf("Set3 == Set4 : %d\n", FindSet(Set3) == FindSet(Set4));
}
댓글 없음:
댓글 쓰기