#include "stdio.h"
class Stack
{
char fName;
int fCount;
int fDisc[100];
public:
Stack(char name);
void Put(int disc);
int Remove(void);
void Display(void);
};
Stack::Stack(char name)
{
fCount = 0;
fName = name;
}
void Stack::Put(int disc)
{
fDisc[fCount++] = disc;
}
int Stack::Remove(void)
{
return fDisc[--fCount];
}
void Stack::Display(void)
{
printf("%c:" , fName);
int i;
for (i = 0; i < fCount; i++)
{
printf("Disc%i ", fDisc[i]);
}
printf("\n");
}
Stack *A = new Stack('A'), *B = new Stack('B'), *C = new Stack('C');
void DisplayAll(void)
{
A->Display();
B->Display();
C->Display();
printf("-------------------\n");
}
void hanoi(int discno, Stack *from, Stack *to, Stack *free)
{
if (discno == 1){
to->Put(from->Remove());
DisplayAll();
}
else {
hanoi(discno-1, from, free, to);
to->Put(from->Remove());
DisplayAll();
hanoi(discno-1, free, to, from);
}
}
int main(int argc, char* argv[])
{
int i;
for (i = 5; i > 0; i--) A->Put(i);
DisplayAll();
hanoi(5, A, B, C);
return 0;
}