#include <iostream>
int lineNumber;
enum pole { onleft, middle, onright };
void towersOfHanoi (int n, pole start, pole temporary, pole destination)
{
if (n > 0) {
towersOfHanoi(n-1, start, destination, temporary);
lineNumber++;
std::cout << lineNumber << ". Move the top from the " << start
<< " pole to the " << destination << " pole.\n";
towersOfHanoi(n-1, temporary, start, destination);
}
}
void towersOfHanoi(
int d)
{
lineNumber = 0;
towersOfHanoi(d, onleft, middle, onright);
}
std::ostream& operator<< (
std::ostream& os,
pole p)
{
switch(p) {
case onleft: os << "left"; break;
case middle: os << "middle"; break;
case onright: os << "right"; break;
}
return os;
}
int main()
{
towersOfHanoi(3);
return 0;
}