void AssignNum(vertex V)
{
vertex M;
Num[V] = counter++;
Visitied[V] = True;
for each W adjanct to V
if(!Visited[W])
{
Parent[W] = V;
AssignNum[W];
}
}
void AssignLow(vertex V)
{
vertex W;
Low[V] = Num[V];
for each W adjanct to V
{
if(Num[W]>Num[V])
{
AssignLow(W);
if(Low[W]>=Num[V])//这里不就一直成立,每个点都是割点
printf("V is an articulation point");
Low[V] = Min(Low[V],Low[W]);
}
else
if(Parent[V]!=W)//V怎么会临接到W呢?
Low[V] = Min(Low[V],Nun[W]);
}
}
数据结构书上将割点的部分,变量的意义在图上。我不明白的是:assignlow中每个Low(W)=Num(W);而Num(W)是递增的,那么assignlow中判断就一直成立,每个都是割点啊、还有就是后面的那个特殊情况没有理解。请大家帮忙讲解一下。谢谢!
一只甜甜圈