/* Name: HANOI TOWER
* Author: yilonglucky#gmail.com
* Description: solve the hanoi tower problem by recursion
*/
#include <stdio.h>
#include <stdlib.h>
/* move n plates: from --> to,
* the buffer can be used if needed */
int hanoi(int n, char from, char buffer, char to)
{
if(n == 1)
{
/* move the NO.1 plate directly: from --> to */
printf("Move plate #%d from %c to %c\n", n, from, to);
/* the NO.1 plate is moved so return */
return 0;
}
else
{
/* n plates to be moved: from --> to,
* move the n-1 plates above: from --> buffer,
* give this task to the next recursion */
hanoi(n-1, from, to, buffer);
/* the n-1 plates above were moved to buffer,
* so the NO.n plate can be moved directly */
printf("Move plate #%d from %c to %c\n", n, from, to);
/* however the n-1 plates are still in buffer,
* move them to the terminal position,
* (the "from" position has no plate, & can be one so-called buffer) */
hanoi(n-1, buffer, from, to);
/* the task given is done so return */
return 0;
}
}
int main()
{
#define N 4
/* N plates in A, let's move them to C */
hanoi(N, 'A', 'B', 'C');
return 0;
}