Télécharger perm11.eso

Retour à la liste

Numérotation des lignes :

  1. C PERM11 SOURCE BP208322 16/06/27 21:16:18 8990
  2.  
  3. SUBROUTINE PERM11(N,C,F,ZMIN)
  4.  
  5. c CALCULE TOUTES LES PERMUTATIONS POSSIBLES
  6. c ET NE RETIENT QUE CELLE DE PLUS BAS COUT
  7. c BP, 2016-06-24
  8.  
  9. IMPLICIT INTEGER(I-N)
  10. IMPLICIT REAL*8(A-H,O-Z)
  11. -INC CCOPTIO
  12.  
  13. INTEGER A(N),F(N),T
  14. REAL*8 C(N,N),Z,ZMIN
  15.  
  16. c INITIALISATION
  17. Z=0
  18. DO I=1,N
  19. A(I)=I
  20. F(I)=I
  21. Z=Z+C(I,I)
  22. ENDDO
  23. ZMIN=Z
  24. c IF(IIMPI.GE.1) WRITE(IOIMP,*) '#',1,' COUT=',Z
  25.  
  26. c IL Y A NC=N! COMBINAISONS POSSIBLES
  27. NC=1
  28. DO I=2,N
  29. NC = NC * I
  30. ENDDO
  31.  
  32. c ON BOUCLE SUR LES COMBINAISONS POSSIBLES
  33. DO 1 IC=2,NC
  34.  
  35. I=N-1
  36. 10 IF(A(I).LT.A(I+1)) GO TO 20
  37. I=I-1
  38. IF(I.EQ.0) GO TO 20
  39. GO TO 10
  40.  
  41. 20 J=I+1
  42. K=N
  43.  
  44. 30 T=A(J)
  45. A(J)=A(K)
  46. A(K)=T
  47. J=J+1
  48. K=K-1
  49. IF(J.LT.K) GO TO 30
  50. J=I
  51. IF(J.NE.0) GO TO 40
  52. GOTO 2
  53. c FIN DU PROGRAMME
  54.  
  55. 40 J=J+1
  56. IF(A(J).LT.A(I)) GO TO 40
  57. T=A(I)
  58. A(I)=A(J)
  59. A(J)=T
  60.  
  61. c CALCUL DU COUT
  62. Z=0
  63. DO I=1,N
  64. Z=Z+C(I,A(I))
  65. ENDDO
  66. c IF(IIMPI.GE.1) WRITE(IOIMP,*) '#',IC,' COUT=',Z
  67. IF(Z.LT.ZMIN) THEN
  68. ZMIN=Z
  69. DO I=1,N
  70. F(I)=A(I)
  71. ENDDO
  72. ENDIF
  73.  
  74. 1 CONTINUE
  75.  
  76. 2 CONTINUE
  77.  
  78. RETURN
  79. END
  80.  
  81.  

© Cast3M 2003 - Tous droits réservés.
Mentions légales