Advertisement
Alx09

Ex3 -Backtraking

Jun 1st, 2020
960
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.23 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define natural unsigned short
  5. #define maxN 10000
  6. unsigned v[maxN], n;
  7. static char st[] = { 0, 0, 1, 2};
  8. natural m, p, q;
  9. void Init(natural k) {
  10.     v[k] = 0;
  11. }
  12. natural Succesor(natural k) {
  13.     if (v[k] < 3) {
  14.         v[k]++;
  15.         return 1;
  16.     }
  17.     return 0;
  18. }
  19.  
  20. natural Valid(natural k) {
  21.     return 1;
  22. }
  23.  
  24. natural Solution(natural k) {
  25.     return (k == n);
  26. }
  27.  
  28. void Print() {
  29.     natural i;
  30.  
  31.     for (i = 1; i <= m; i++)
  32.         printf("0");
  33.     for (i = 1; i <= p; i++)
  34.         printf("1");
  35.     for (i = 1; i <= q; i++)
  36.         printf("2");
  37.     for (i = 1; i <= n; i++)
  38.         printf("%d", st[v[i]]);
  39.  
  40.     printf("\n");
  41. }
  42.  
  43. void Back() {
  44.     natural k = 1, isS, isV;
  45.     Init(k);
  46.     while (k > 0) {
  47.         isS = 0; isV = 0;
  48.         if (k <= n)
  49.             do {
  50.                 isS = Succesor(k);
  51.                 if (isS) isV = Valid(k);
  52.             } while (isS && !isV);
  53.             if (isS)
  54.                 if (Solution(k))
  55.                     Print();
  56.                 else {
  57.                     k++;
  58.                     Init(k);
  59.                 }
  60.             else
  61.                 k--;
  62.     }
  63. }
  64.  
  65. int main() {
  66.     do {
  67.         system("cls");
  68.         printf("n = "); scanf("%d", &n);
  69.         printf("m = "); scanf("%hu", &m);
  70.         printf("p = "); scanf("%hu", &p);
  71.         printf("q = "); scanf("%hu", &q);
  72.     } while (n >= maxN );
  73.     n = n - m - p - q;
  74.     if (n == 0)
  75.         Print();
  76.     Back();
  77.     system("pause");
  78.     return 0;
  79.  
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement