Télécharger perm21.eso

Retour à la liste

Numérotation des lignes :

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

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