Télécharger perm21.eso

Retour à la liste

Numérotation des lignes :

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

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