numo
C NUMO SOURCE CHAT 05/01/13 02:03:22 5004 C************************************************************************** C************************************************************************** C**************************** *************************** c************************ NUMero ************************** c**************************** *************************** C************************************************************************** C************************************************************************** C on renumerote les noeuds a partir de l'arborescence obtenue C par le biais de la subroutine IFILSFRE. C pour se faire, on se sert d'une pile, surlaquelle on empile ou depile. IMPLICIT INTEGER(I-N) INTEGER RACINE,NBENS SEGMENT IORDRE(0) SEGMENT IFRERE(0),IFILS(0) SEGMENT IPILE(NBENS+1) INTEGER EMPIL,DEPIL SEGINI IPILE N=NBENS C le nombre de noeuds a empiler est egal a NBENS. IPILE(1)=1 IPILE(2)=RACINE C la taille de la pile est dans IPILE(1). C le premier element de la pile est la RACINE. 10 IF (N.NE.0) THEN C s'il reste des elements a empiler, 50 EMPIL=IFRERE(IPILE(IPILE(1)+1)) C on cherche, le frere du dernier element empile. IF (EMPIL.NE.0) THEN C s'il existe, IPILE(1)=IPILE(1)+1 IPILE(IPILE(1)+1)=EMPIL C on l'empile dans la pile. GOTO 50 C on recommence jusqu'a ne plus avoir de frere. ENDIF 20 IF (N.EQ.0) GOTO 30 C quand on a tout empile,on a fini. DEPIL=IPILE(IPILE(1)+1) IPILE(1)=IPILE(1)-1 C au fur et a mesure qu'on empile,on depile IORDRE(DEPIL+NBENS)=N IORDRE(N)=DEPIL N=N-1 C on numerote les noeuds depiles par ordre decroissant. IF(IFILS(DEPIL).NE.0) THEN IPILE(1)=IPILE(1)+1 IPILE(IPILE(1)+1)=IFILS(DEPIL) C si le noeud depile a un fils, C on empile ce fils a la position de son pere C qui a ete depile. ELSE GOTO 20 C sinon,on redepile. ENDIF GOTO 10 ENDIF SEGSUP IPILE C suppression du segment de travail. 30 RETURN END
© Cast3M 2003 - Tous droits réservés.
Mentions légales