邻接矩阵:
void build(int s)
{
visit[s]=1;//该点是否访问过
for(int i=1;i<=n;i++)
if( f[s][i] && !visit[i] )//f[s][i]是标记s与i是否有连边
{
if( !zr[s] ) zuo[s]=i;
else you[zr[s]]=i;//zr是一个迭代
zr=i;
}
if( zuo[s] ) build(zuo[s]);//递归
if( you[s] ) build(you[s]);
}
邻接表:
void build(int v)
{ int t=0,w=1;
p[1]=v;
visit[p[1]]=true;//以1为根节点
while(t<w)
{
t++;
for(int i=head[p[t]];i;i=e[i].next)
if(!visit[e[i].to])
{
if(!zr[p[t]])
{
zuo[p[t]]=e[i].to;
w++;
p[w]=e[i].to;
visit[e[i].to]=true;
}
else
{
you[p[w]]=e[i].to;
w++;
p[w]=e[i].to;
visit[e[i].to]=true;
}
zr[p[t]]=true;
}
}
}