Hanojské věže

#include <iostream>
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.";
}
 
zalg/veze_st.txt · Last modified: 2021/04/28 15:14 by 88.103.111.44
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki