vendredi 4 novembre 2011

Voici un petit exemple d'implémentation de l'algorithme des tours de Hanoi en Java. Si j'ai un peu de temps, je vous écrit le même algo en Groovy et en PHP, mes deux langages préférés (enfin, surtout ceux que je connais à peu près...). Si quelqu'un veut m'envoyer sa version dans son langage préféré. On pourrait même faire un petit benchmark ensuite.
/**
 * algorithme récursif de résolution des tours de Hanoi
 * 
 * @author olivier
 */

import java.util.*;

public class hanoi_recursive {
 static int coup = 0;

 public static void main(String[] args) {
  Scanner Entree = new Scanner(System.in);
  System.out.printf("Entrez le nombre de disques : ");
  int nbDisques = Entree.nextInt();
  Entree.close();
  System.out.printf("\n coup    déplacement\n");
  System.out.printf("---------------------\n");
  long startTime = System.currentTimeMillis();
  deplacer(nbDisques, 1, 3, 2);
  long endTime = System.currentTimeMillis();
  System.out.println("Temps d\'exécution en millisecondes :"
    + (endTime - startTime));
 }

 /**
  * procédure récursive des tours de Hanoi
  * @param nb_disques
  * @param depart
  * @param arrivee
  * @param intermediaire
  */
 static void deplacer(int nb_disques, int depart, int arrivee,
   int intermediaire) {
  if (nb_disques == 1) // déplacement d'un seul disque
   System.out.printf("%4d      %d -> %d\n", ++coup, depart, arrivee);
  else // déplacement d'une pile de disques
  {
   deplacer(nb_disques - 1, depart, intermediaire, arrivee);
   deplacer(1, depart, arrivee, intermediaire);
   deplacer(nb_disques - 1, intermediaire, arrivee, depart);
  }
 }
}

Aucun commentaire: