class Hanoi {

    /**
     * Affiche les liste des étapes de résolution du problème des tours de
     * Hanoï, où il faut déplacer 'n' disques du piquet 'source' vers le
     * piquet 'destination', en utilisant éventuellement un troisième
     * piquet : 'intermediaire'.
     * @param n nb de disques
     * @param plateau plateau de jeu
     * @param source
     * @param destination
     * @param intermediaire
     * @return le nb de mvts effectués
     */
    public static int hanoi(int n, PlateauHanoi plateau, char source, char destination, char intermediaire)
    {
        int nmouv;
        if (n == 1) {
            nmouv = 1;
            System.out.println("mouvement : " + source + " -> " + destination);
	        plateau.move(source, destination) ;
        } else {
            nmouv = 0;
            nmouv += hanoi(n - 1, plateau, source, intermediaire, destination);
            nmouv += hanoi(1, plateau, source, destination, intermediaire);
            nmouv += hanoi(n - 1, plateau, intermediaire, destination, source);
        }
        return nmouv;
    }
    
    public static void main(String[] args) {
        if (args.length == 0) {
            System.out.println("Usage: java Hanoi <n>");
        } else {
            int n = Integer.parseInt(args[0]);
            int nmouv;
            PlateauHanoi plateau = new PlateauHanoi(n);
            System.out.println("# Résolution des tours de Hanoï pour n = " +
                               n + "...");
            nmouv = hanoi(n, plateau, 'A', 'C', 'B');
            System.out.println();
            System.out.println("# ... résolution en " + nmouv + " mouvement" +
                               (nmouv == 1 ? "" : "s"));
        }
    }
}
