Advertisement
madalinaradu

ASD lab backtracking

Mar 18th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.42 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4.  
  5. //permutari 1234
  6. //          1342
  7. // in vect solutie scriem permutarea o afisam, urm suprascrie
  8.  
  9. int sol[20], n = 6;//globale
  10. void afisare() {
  11.     for (int i = 1; i <= n; i++) {
  12.         printf("%3d", sol[i]);
  13.     }
  14.     printf("\n");
  15. }
  16.  
  17. //functia valid pt permutari clasice:
  18. int valid1(int k){
  19. for (int i=1;i<k;i++) // verifică dacă elementul din
  20. if (sol[i]==sol[k]) return 0; // vârf este diferit de elemente precedente din stivă
  21. return 1;
  22. }
  23. //functia valid pentru permutari crescatoare, apoi descrescatoare
  24. int valid21(int k) {// sau bool
  25.     for (int i = 1; i < k; i++) {
  26.         if (sol[k] == sol[i])
  27.             return 0;
  28.     }
  29.     int pozitie = n / 2;
  30.     if (k <= pozitie && k>1) {
  31.         if (sol[k] < sol[k - 1])
  32.             return 0;
  33.     }
  34.     if (k > pozitie + 1) {
  35.         if (sol[k] > sol[k - 1])
  36.             return 0;
  37.     }
  38.     return 1;
  39. }
  40.  
  41. //functia valid pentru permutari descrescatoare, apoi crescatoare
  42. int valid22(int k) {// sau bool
  43.     for (int i = 1; i < k; i++) {
  44.         if (sol[k] == sol[i])
  45.             return 0;
  46.     }
  47.     int pozitie = n / 2;
  48.     if (k <= pozitie && k>1) {
  49.         if (sol[k] > sol[k - 1])
  50.             return 0;
  51.     }
  52.     if (k > pozitie + 1) {
  53.         if (sol[k] < sol[k - 1])
  54.             return 0;
  55.     }
  56.     return 1;
  57. }
  58.  
  59. //pozitiile pare raman neschimbate
  60. int valid3(int k) {// sau bool
  61.     for (int i = 1; i < k; i++) {
  62.         if (sol[k] == sol[i])
  63.             return 0;
  64.     }
  65.  
  66.     if (k % 2 == 0 && sol[k] != k)
  67.         return 0;
  68.     return 1;
  69. }
  70. //combinatii de 0,1 a.i sa nu fie 2 cifre de 1 alaturate
  71. int valid4(int k) {                                          // sau bool
  72.     if(k>1 && sol[k]==sol[k-1] && sol[k]==0)
  73.         return 0;
  74.     return 1;
  75. }
  76.  
  77.  
  78.  
  79.  
  80. void bkt(int k) {
  81.  
  82.     for (int i = 1;i <= n;i++) {
  83.         sol[k] = i;
  84.         if (valid3(k)) {
  85.             if (k == n) {
  86.  
  87.                 afisare();
  88.             }
  89.  
  90.             else bkt(k + 1);
  91.         }
  92.     }
  93. }
  94.  
  95. //cresc desc adaugam conditii, conditii de unicitate si cond ca pana la jum sa fie cresc/descresc si invers
  96. int main() {
  97.  
  98.  
  99.     bkt(1);
  100.     printf("-------");
  101.  
  102.     _getch();
  103.     return 0;
  104. }
  105.  
  106. //https://tehprog.weebly.com/backtracking.html
  107. //https://informaticacnet.wordpress.com/category/clasa-a-xi-a/metode-backtraking/
  108. //http://www.aut.upt.ro/~ovidiub/files/TP/TP5.pdf
  109.  
  110. //mutari rege
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement