Télécharger perm11.eso

Retour à la liste

Numérotation des lignes :

perm11
  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.  
  12. -INC PPARAM
  13. -INC CCOPTIO
  14.  
  15. INTEGER A(N),F(N),T
  16. REAL*8 C(N,N),Z,ZMIN
  17.  
  18. c INITIALISATION
  19. Z=0
  20. DO I=1,N
  21. A(I)=I
  22. F(I)=I
  23. Z=Z+C(I,I)
  24. ENDDO
  25. ZMIN=Z
  26. c IF(IIMPI.GE.1) WRITE(IOIMP,*) '#',1,' COUT=',Z
  27.  
  28. c IL Y A NC=N! COMBINAISONS POSSIBLES
  29. NC=1
  30. DO I=2,N
  31. NC = NC * I
  32. ENDDO
  33.  
  34. c ON BOUCLE SUR LES COMBINAISONS POSSIBLES
  35. DO 1 IC=2,NC
  36.  
  37. I=N-1
  38. 10 IF(A(I).LT.A(I+1)) GO TO 20
  39. I=I-1
  40. IF(I.EQ.0) GO TO 20
  41. GO TO 10
  42.  
  43. 20 J=I+1
  44. K=N
  45.  
  46. 30 T=A(J)
  47. A(J)=A(K)
  48. A(K)=T
  49. J=J+1
  50. K=K-1
  51. IF(J.LT.K) GO TO 30
  52. J=I
  53. IF(J.NE.0) GO TO 40
  54. GOTO 2
  55. c FIN DU PROGRAMME
  56.  
  57. 40 J=J+1
  58. IF(A(J).LT.A(I)) GO TO 40
  59. T=A(I)
  60. A(I)=A(J)
  61. A(J)=T
  62.  
  63. c CALCUL DU COUT
  64. Z=0
  65. DO I=1,N
  66. Z=Z+C(I,A(I))
  67. ENDDO
  68. c IF(IIMPI.GE.1) WRITE(IOIMP,*) '#',IC,' COUT=',Z
  69. IF(Z.LT.ZMIN) THEN
  70. ZMIN=Z
  71. DO I=1,N
  72. F(I)=A(I)
  73. ENDDO
  74. ENDIF
  75.  
  76. 1 CONTINUE
  77.  
  78. 2 CONTINUE
  79.  
  80. RETURN
  81. END
  82.  
  83.  

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