算法之并查集 C语言实现1

来源:互联网 发布:怎么打开淘宝网址链接 编辑:程序博客网 时间:2024/05/21 23:00

头文件 UnionFind.h

#ifndef UNIONFIND_H_INCLUDED#define UNIONFIND_H_INCLUDED#include "stdlib.h"#include "ASSERT.h"typedef struct{    int* id;    int count;}Union;void unionFindInit(Union *un,int n);void freeUnion(Union *un);int unionFind(Union *un,int p);int isConnected(Union *un,int p,int q);void unionElements(Union *un,int p,int q);#endif // UNIONFIND_H_INCLUDED

c代码 UnionFind.c

include “UnionFind.h”

/**********************************************函数名:并查集的初始化*********************************************/void unionFindInit(Union *un,int n){    int i;    un->count = n;    un->id = (int*)malloc(n*sizeof(int));    for(i=0;i<n;i++){        un->id[i] = i;    }}/**********************************************函数名:并查集将空间释放*********************************************/void freeUnion(Union *un){    free(un->id);}/**********************************************函数名:返回并查集中p的ID*********************************************/int unionFind(Union *un,int p){    assert(p >= 0 && p< un->count);    return un->id[p];}/**********************************************函数名:判断并查集中p和q是否是一个集合*********************************************/int isConnected(Union *un,int p,int q){    return unionFind(un,p) == unionFind(un,q) ;}/**********************************************函数名:并查集的合并*********************************************/void unionElements(Union *un,int p,int q){    int i;    int pID = unionFind(un,p);    int qID = unionFind(un,q);    if(pID == qID){        return ;    }    else{        for(i=0;i<un->count;i++){            if(pID == un->id[i]){                qID = un->id[i];            }        }    }}
0 0
原创粉丝点击