最开始的方法为:
int fa[MAXNODENUM];//MAXNODENUM为节点的数量
for(i=1;i<=MAXNODENUM;i++)//节点编号从1开始
{fa[i]=-1;}//对fa[]进行初始化
int findfa(int v)
{int w=v;
while(fa[w]>-1)
w=fa[w];
return w;
}
int fv1=findfa(v1);
int fv2=findfa(v2);
if(fv1!=fv2)
{fa[fv1]=fv2;
................
}
方法改进:由于上述方法每一次都要从若干次的循环
for(i=1;i<=MAXNUMNODE;i++)
{fa[i]=-1;}
int findfa(int v)
{if(fa[v]>-1)
fa[v]=findfa(fa[v]);
else
return v;
return fa[v];
}
方法三:
for(i=1;i<=MAXNUMNODE;i++)
{fa[i]=i;}int findfa(int v)
{if(v!=fa[v])
fa[v]=findfa(fa[v]);
return fa[v];
}