|
发表于 2004-8-31 02:54:10
|
显示全部楼层
<>ROCEDURE TOPO(n,R,m,P)</P><>定义数组F(1:n),G(1:n),S(1;n),V(1;m),NEXT(1;m)</P><P>top=0; [栈初始化]t=1</P><P>FOR k=1 TO n DO {F(k)=0;G(k)=0} [初使化]</P><P>FOR k=1 TO m DO [读入m个二元组]</P><P> {i=R(k,1);j=R(k,2) [依次读入一个二元组]</P><P> F(j)=F(j)+1 [数j的前件计数]</P><P> NEXT(k)=G(i);V(k)=j;G(i)=k [将j链入到以G(i)为头指针的链表的链头]</P><P> }</P><P>FOR k=1 TO n DO [将所有没有前件的数入栈]</P><P>IF(F(k)=0) THEN {top=top+1,S(top)=k} </P><P>WHILE(top!=0) DO</P><P> {i=S(top);top=top-1;P(t)=i;t=t+1 [从栈中退出一个无前件的数]</P><P> k=G(i)</P><P> WHILE(k!=0) DO</P><P> {j=V(k);F(j)=F(j)-1 [i后件j的前件计数减1]</P><P> IF(F(j)=0) THEN {top=top+1;S(top)=j} [无前件数j入栈]</P><P> k=NEXT(k) [考虑i的下一个后件]</P><P> }</P><P> }</P><P>FOR k=1 TO n DO [考虑无法分类的数]</P><P>IF(F(k)!=0) THEN {p(t)=-k;t=t+1}</P><P>RETURN</P> |
|