C: Torres de Hanoi
Resuelve el problema de las torres de Hanoi de forma recursiva, en C
Lenguaje: C (compilador: GCC 3)
Categoría: Minijuegos
/* Fuente procedente de ErrorDeSintaxis.es */
/* Resuelve el problema de las torres de Hanoi */
/* de forma recursiva, en C */
/* Compilador: GCC 3 */
/* Nivel: Básico */
/* Disponible desde 31/08/2011 */
/* Aportado por Nacho */
/* Autor original: Paul Griffiths */
/* Web original: http://www.paulgriffiths.net/program/c/srcs/hanoisrc.html */
/* HANOI.C ======= (c) Paul Griffiths 1999 Email: mail@paulgriffiths.net Outputs moves necessary to complete the "Towers of Hanoi" puzzle using a recursive function. Versión traducida al español y simplificada para ErrorDeSintaxis.es */ #include <stdlib.h> #include <string.h> #include <stdio.h> /* Declaraciones de funciones */ void Hanoi (int columnaInic, int columnaFin, int numeroDiscos); /* Cuerpo del programa: funcion main() */ int main(int argc, char *argv[]) { int columnaInic, columnaFin, numeroDiscos; /* Valores de las variables */ printf("Cantidad de discos (p.ej. 4) ?"); scanf("%d", &numeroDiscos); printf("Columna inicial (p.ej. 1) ?"); scanf("%d", &columnaInic); printf("Columna final (p.ej. 3) ?"); scanf("%d", &columnaFin); /* Calcular y mostrar los movimientos necesarios */ printf("\nTorres de Hanoi!\n"); printf("================\n"); printf("Se van a mover %d discos de las columna %d a la columna %d...\n", numeroDiscos, columnaInic, columnaFin); Hanoi(columnaInic, columnaFin, numeroDiscos); exit(EXIT_SUCCESS); } /* Calcula y muestra los movimientos necesarios para resolver el puzzle */ void Hanoi(int columnaInic, int columnaFin, int numeroDiscos) { if ( numeroDiscos ) { Hanoi(columnaInic, 6 - (columnaInic + columnaFin), numeroDiscos - 1); printf("Moviendo disco de la columna %d a la columna %d\n", columnaInic, columnaFin); Hanoi(6 - (columnaInic + columnaFin), columnaFin, numeroDiscos - 1); } }
Resultado:
Cantidad de discos (p.ej. 4) ?4 Columna inicial (p.ej. 1) ?1 Columna final (p.ej. 3) ?3 Torres de Hanoi! ================ Se van a mover 4 discos de las columna 1 a la columna 3... Moviendo disco de la columna 1 a la columna 2 Moviendo disco de la columna 1 a la columna 3 Moviendo disco de la columna 2 a la columna 3 Moviendo disco de la columna 1 a la columna 2 Moviendo disco de la columna 3 a la columna 1 Moviendo disco de la columna 3 a la columna 2 Moviendo disco de la columna 1 a la columna 2 Moviendo disco de la columna 1 a la columna 3 Moviendo disco de la columna 2 a la columna 3 Moviendo disco de la columna 2 a la columna 1 Moviendo disco de la columna 3 a la columna 1 Moviendo disco de la columna 2 a la columna 3 Moviendo disco de la columna 1 a la columna 2 Moviendo disco de la columna 1 a la columna 3 Moviendo disco de la columna 2 a la columna 3