| hanoi.c - Hele programmet. | Lektion 8 - slide 21 : 27 Program 1 |
#include <stdio.h>
enum tower {left, middle, right};
typedef enum tower tower;
void move_one_disc(tower a, tower b);
char *tower_out(tower t);
/* Move n discs from tower a to tower b via tower c */
void hanoi(int n, tower a, tower b, tower c){
if (n == 1)
move_one_disc(a,b);
else {
hanoi(n-1,a,c,b);
move_one_disc(a,b);
hanoi(n-1,c,b,a);
}
}
void move_one_disc(tower a, tower b){
static long count = 0;
count++;
printf("%5i. Move disc from %6s tower to %6s tower\n",
count, tower_out(a), tower_out(b));
}
char *tower_out(tower t){
static char *result;
switch (t){
case left: result = "LEFT"; break;
case middle: result = "MIDDLE"; break;
case right: result = "RIGHT"; break;
}
return result;
}
int main(void) {
int number_of_discs;
printf("How many discs: ");
scanf("%d", &number_of_discs);
hanoi(number_of_discs, left, right, middle);
return 0;
}