标签:else data type += 集中 目的 改进 struct fse
typedef struct {
TElemType data;
int parent;
}PTNode;
typedef struct {
PTNode nodes[MAX_TREE_SIZE];
int r, n;//根结点所在位置和结点数
}PTree;
typedef PTree MFset;
查找i所属子集
int find_mfset(MFset S, int i)
{
int j;
if (i<1 || i>S.n)
return -1;
for (j = i; S.nodes[j].parent > 0; j = S.nodes[j].parent);
return j;
}
集合的并
int merge_mfset(MFset& S, int i, int j)
{
if (i<1 || i>S.n || j<1 || j>S.n)
return -1;
S.nodes[i].parent = j;
return 1;
}
改进并操作算法,令成员较少的子集树指向成员较多的子集树的根;令根的parent为存储子集中所含成员数目的负值。
int min_mfset(MFset& S, int i, int j)
{
if (i<1 || i>S.n || j<1 || j>S.n)
return -1;
if (S.nodes[i].parent < S.nodes[j].parent)
{
S.nodes[j].parent = i;
S.nodes[i].parent += S.nodes[j].parent;
}
else
{
S.nodes[i].parent = j;
S.nodes[j].parent += S.nodes[i].parent;
}
return 1;
}
改进查找子集算法,当所查找的元素i不在树的第二层,在算法中增添一个压缩路径的功能,即将所有从根到元素i路径上的元素都变成树根的孩子
int mix_mfset(MFset& S, int i)
{
int i, j, k, t;
if (i<1 || i>S.n)
return -1;
for (j = i; S.nodes[j].parent > 0; j = S.nodes[j].parent);
for (k = i; k != j; k = t )
{
S.nodes[k].parent = j;
t = S.nodes[k].parent;
}
return j;
}
标签:else data type += 集中 目的 改进 struct fse
原文地址:https://www.cnblogs.com/KIROsola/p/12064497.html