Guest User

Untitled

a guest
Aug 19th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct krazek
  5. {
  6.     int nr_krazka;
  7.     struct krazek * poprzedni;
  8. };
  9.  
  10. void dodaj_krazek(struct krazek * stos, int nr_krazka)
  11. {
  12.     if (stos == NULL)
  13.     {
  14.         stos = (struct krazek *) malloc(sizeof(struct krazek));
  15.         stos->nr_krazka = nr_krazka;
  16.         stos->poprzedni = NULL;
  17.     }
  18.     else
  19.     {
  20.         struct krazek * temp = (struct krazek *) malloc(sizeof(struct krazek));
  21.         temp->nr_krazka = nr_krazka;
  22.         temp->poprzedni = stos;
  23.         stos = temp;
  24.     }
  25. }
  26.  
  27. int zdejmij_krazek(struct krazek * stos)
  28. {
  29.     if (stos == NULL)
  30.     {
  31.         return NULL;
  32.     }
  33.     else
  34.     {
  35.         struct krazek * temp = stos;
  36.         int wynik = temp->nr_krazka;
  37.         stos = stos->poprzedni;
  38.         free(temp);
  39.         return wynik;
  40.     }
  41. }
  42.  
  43. void hanoi(int n, struct krazek * a, struct krazek * b, struct krazek * c, int zn_a, int zn_b, int zn_c)
  44. {
  45.     if (n > 0)
  46.     {
  47.         hanoi(n - 1, a, c, b, zn_a, zn_c, zn_b);
  48.         printf("%d > %d\n", zn_a, zn_c);
  49.         dodaj_krazek(c, zdejmij_krazek(a));
  50.         hanoi(n - 1, b, a, c, zn_b, zn_a, zn_c);
  51.     }
  52. }
  53.  
  54. int main()
  55. {
  56.     int ilosc_krazkow, poczatek, koniec, bufor;
  57.  
  58.     scanf("%d %d %d", &ilosc_krazkow, &poczatek, &koniec);
  59.  
  60.     struct krazek * stos[3];
  61.     stos[0] = NULL;
  62.     stos[1] = NULL;
  63.     stos[2] = NULL;
  64.  
  65.     int i;
  66.     for (i = ilosc_krazkow; i > 0; i--)
  67.     {
  68.         dodaj_krazek(stos[poczatek - 1], i);
  69.     }
  70.  
  71.     for (i = 1; i <= 3; i++)
  72.     {
  73.         if (i != poczatek && i != koniec)
  74.             bufor = i;
  75.     }
  76.     hanoi(ilosc_krazkow, stos[poczatek - 1], stos[bufor - 1], stos[koniec - 1], poczatek, bufor, koniec);
  77.     return 0;
  78. }
Add Comment
Please, Sign In to add comment