[[veze_ut]]
 
 
#include "stdafx.h"
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
 
const int N = 9;
 
struct Vez
{
    int k;
    int p[N];
};
 
Vez A, B, C;
 
void inic(Vez &X)
{
    for (int i = 0; i < N; i++)
    {
        X.p[i] = N - i;
    }
    X.k = N;
}
 
void clear (Vez &X)
{
    for (int i = 0; i < N; i++)
    {
        X.p[i] = 0;
    }
    X.k = 0;
}
void put (Vez &X)
{
    for (int i = 0; i < X.k; i++)
        cout << X.p[i] << " ";
    for (int i = X.k; i < N; i++)
        cout << "  ";
}
 
void print ()
{
    put (A);
    cout << ": ";
    put (B);
    cout << ": ";
    put (C);
    cout << endl;
}
 
void move (Vez &X, Vez &Y)
{
    assert (X.k > 0);
    int d = X.p[(X.k) - 1];
    X.p[X.k - 1] = 0;
    X.k = X.k - 1;
    if (Y.k > 0)
    {
    assert (Y.p[Y.k - 1] > d);
    }
    assert (Y.k < N);
    Y.k = Y.k + 1;
    Y.p[Y.k - 1] = d;
 
    // Y.p[Y.k++] = X.p[--X.k];
    print ();
}
 
void transfer (Vez &X, Vez &Y, Vez &Z, int v)
{
    if (v > 1) transfer (X, Z, Y, v - 1);
    move (X, Z);
    if (v > 1) transfer (Y, X, Z, v - 1);
}
 
int main()
{
    inic  (A);
    clear (B);
    clear (C);
    transfer (A, B, C, N);
 
 
    cout << "Konec programu" << endl;
    system ("pause");
    return 0;
}
 
veze_ut.txt · Last modified: 2018/05/15 10:24 by 147.32.8.110
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki