/** * */ package backtracking; import java.util.Stack; /** * @author klimann * */ public class Backtracking { Jeu jeu; /** * Vector solution pour la version recursif sans parametre */ private Stack V; public Backtracking(Jeu jeu){ this.jeu = jeu; this.V = new Stack(); } public void iteratif(){ Stack pile = new Stack(); Object position = this.jeu.positionInitiale(); Object valeurCourante = this.jeu.valeurInitialePossible(position); while(this.jeu.positionValide(position)){ while(valeurCourante != null){ this.jeu.empiler(pile, valeurCourante); if(this.jeu.estSolution(pile)){ this.jeu.affiche(pile); valeurCourante = this.jeu.valeurSuivantePossible(this.jeu.depiler(pile),position); } else { position = this.jeu.positionSuivante(position); valeurCourante = this.jeu.valeurInitialePossible(position); } } position = this.jeu.positionPrecedente(position); if (!pile.empty()){ valeurCourante = this.jeu.valeurSuivantePossible(this.jeu.depiler(pile),position); } } } public void recursif(Stack V, Object position) { if (this.jeu.estSolution(V)) this.jeu.affiche(V); else { Object valeurCourante = this.jeu.valeurInitialePossible(position); while(valeurCourante != null) { this.jeu.empiler(V,valeurCourante); this.recursif(V,this.jeu.positionSuivante(position)); valeurCourante = this.jeu.valeurSuivantePossible(this.jeu.depiler(V),position); } } } public void recursif(Object position) { if (this.jeu.estSolution(this.V)) this.jeu.affiche(this.V); else { Object valeurCourante = this.jeu.valeurInitialePossible(position); while(valeurCourante != null) { this.jeu.empiler(this.V,valeurCourante); this.recursif(this.jeu.positionSuivante(position)); valeurCourante = this.jeu.valeurSuivantePossible(this.jeu.depiler(this.V),position); } } } }