《数据结构与算法分析——C语言描述》 第八章
disjset.h
#ifndef _DisjSet_H #define _DisjSet_H #define NumSets 22 typedef int DisjSet[NumSets + 1];//DisjSet为一个数组类型 typedef int SetType; typedef int ElementType; void initilialize_disjSet(DisjSet s); void setUnion_disjSet(DisjSet s, SetType root1, SetType root2); SetType find_disjSet(ElementType X, DisjSet s); #endif
disjset.c
#include"disjset.h" void initilialize_disjSet(DisjSet s) { for (int i = NumSets; i > 0; i--) s[i] = 0; } void setUnion_disjSet(DisjSet s, SetType root1, SetType root2) { if (s[root2] < s[root1]) { s[root1] = root2; } else { if (s[root2] == s[root1]) s[root1]--; s[root2] = root1; } } SetType find_disjSet(ElementType X, DisjSet s) { if (s[X] <= 0) return X; else return s[X]= find_disjSet(s[X], s); }
main.c
#include<stdio.h> #include"disjset.h" int main() { DisjSet s; initilialize_disjSet(s); int u, v; printf("enter the connection\n"); while (scanf("%d%d", &u, &v) == 2) { SetType utype = find_disjSet(u, s); SetType ttype = find_disjSet(v, s); if (utype == ttype) printf("has connected\n"); else { printf("conncet them\n"); setUnion_disjSet(s, utype,ttype); } printf("enter the connection\n"); } }