7.18.2017

자료구조 분리집합 DisjointSet

//disJointSet.h 헤더파일 만들기

#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* Set1DisjointSet* Set2);
DisjointSet* FindSet(DisjointSet* Set);
DisjointSet* MakeSet(void* NewData);
void DestroySet(DisjointSetSet);

#endif

=============================================================================

#include "disjointSet.h"

void UnionSet(DisjointSet* Set1DisjointSet* Set2) {
        Set2 = FindSet(Set2);
        Set2 -> Parent = Set1;
}

DisjointSet* FindSet(DisjointSet* Set) {
        while (Set->Parent != NULL)
                Set Set->Parent;
        return Set;
}

DisjointSet* MakeSet(voidNewData) {
        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));
}

댓글 없음:

댓글 쓰기