C PERM11 SOURCE BP208322 16/06/27 21:16:18 8990 SUBROUTINE PERM11(N,C,F,ZMIN) c CALCULE TOUTES LES PERMUTATIONS POSSIBLES c ET NE RETIENT QUE CELLE DE PLUS BAS COUT c BP, 2016-06-24 IMPLICIT INTEGER(I-N) IMPLICIT REAL*8(A-H,O-Z) -INC PPARAM -INC CCOPTIO INTEGER A(N),F(N),T REAL*8 C(N,N),Z,ZMIN c INITIALISATION Z=0 DO I=1,N A(I)=I F(I)=I Z=Z+C(I,I) ENDDO ZMIN=Z c IF(IIMPI.GE.1) WRITE(IOIMP,*) '#',1,' COUT=',Z c IL Y A NC=N! COMBINAISONS POSSIBLES NC=1 DO I=2,N NC = NC * I ENDDO c ON BOUCLE SUR LES COMBINAISONS POSSIBLES DO 1 IC=2,NC I=N-1 10 IF(A(I).LT.A(I+1)) GO TO 20 I=I-1 IF(I.EQ.0) GO TO 20 GO TO 10 20 J=I+1 K=N 30 T=A(J) A(J)=A(K) A(K)=T J=J+1 K=K-1 IF(J.LT.K) GO TO 30 J=I IF(J.NE.0) GO TO 40 GOTO 2 c FIN DU PROGRAMME 40 J=J+1 IF(A(J).LT.A(I)) GO TO 40 T=A(I) A(I)=A(J) A(J)=T c CALCUL DU COUT Z=0 DO I=1,N Z=Z+C(I,A(I)) ENDDO c IF(IIMPI.GE.1) WRITE(IOIMP,*) '#',IC,' COUT=',Z IF(Z.LT.ZMIN) THEN ZMIN=Z DO I=1,N F(I)=A(I) ENDDO ENDIF 1 CONTINUE 2 CONTINUE RETURN END