====== Hanojské věže ====== #include using namespace std; const int Max = 4; struct Vez { int v; // vyska, pocet disku int p [Max+1]; // p[1] velikost spodniho disku, ..., p[v] horniho horniho disku, p[0] nepouzivame }; void nuluj (Vez & X) { X.v = 0; for (int i = 0; i < Max+1; i++) X.p [i] = 0; } void napln (Vez & X) { X.v = Max; for (int i = 1; i <= Max; i++) X.p[i] = Max + 1 - i; } void krok (Vez & X, Vez & Z) { int d = X.p [X.v]; // horni hisk X.v --; Z.v ++; Z.p [Z.v] = d; } void tisk (); void hraj (Vez & X, Vez & Y, Vez & Z, int k) { if (k > 1) hraj (X, Z, Y, k-1); krok (X, Z); tisk (); if (k > 1) hraj (Y, X, Z, k-1); } Vez A, B, C; void tiskniVez (Vez & X) { for (int i = 1; i <= X.v; i++) cout << X.p [i]; for (int i = X.v + 1; i <= Max; i++) cout << ' '; } void tisk () { tiskniVez (A); cout << " : "; tiskniVez (B); cout << " : "; tiskniVez (C); cout << endl; } int main() { napln (A); nuluj (B); nuluj (C); tisk (); hraj (A, B, C, Max); /* krok (A, C); krok (A, B); tisk (); */ std::cout << "0.K."; }