#include "stdafx.h" #include #include #include 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; }