![]() ![]() | 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; }