Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- struct krazek
- {
- int nr_krazka;
- struct krazek * poprzedni;
- };
- void dodaj_krazek(struct krazek * stos, int nr_krazka)
- {
- if (stos == NULL)
- {
- stos = (struct krazek *) malloc(sizeof(struct krazek));
- stos->nr_krazka = nr_krazka;
- stos->poprzedni = NULL;
- }
- else
- {
- struct krazek * temp = (struct krazek *) malloc(sizeof(struct krazek));
- temp->nr_krazka = nr_krazka;
- temp->poprzedni = stos;
- stos = temp;
- }
- }
- int zdejmij_krazek(struct krazek * stos)
- {
- if (stos == NULL)
- {
- return NULL;
- }
- else
- {
- struct krazek * temp = stos;
- int wynik = temp->nr_krazka;
- stos = stos->poprzedni;
- free(temp);
- return wynik;
- }
- }
- void hanoi(int n, struct krazek * a, struct krazek * b, struct krazek * c, int zn_a, int zn_b, int zn_c)
- {
- if (n > 0)
- {
- hanoi(n - 1, a, c, b, zn_a, zn_c, zn_b);
- printf("%d > %d\n", zn_a, zn_c);
- dodaj_krazek(c, zdejmij_krazek(a));
- hanoi(n - 1, b, a, c, zn_b, zn_a, zn_c);
- }
- }
- int main()
- {
- int ilosc_krazkow, poczatek, koniec, bufor;
- scanf("%d %d %d", &ilosc_krazkow, &poczatek, &koniec);
- struct krazek * stos[3];
- stos[0] = NULL;
- stos[1] = NULL;
- stos[2] = NULL;
- int i;
- for (i = ilosc_krazkow; i > 0; i--)
- {
- dodaj_krazek(stos[poczatek - 1], i);
- }
- for (i = 1; i <= 3; i++)
- {
- if (i != poczatek && i != koniec)
- bufor = i;
- }
- hanoi(ilosc_krazkow, stos[poczatek - 1], stos[bufor - 1], stos[koniec - 1], poczatek, bufor, koniec);
- return 0;
- }
Add Comment
Please, Sign In to add comment