/** * Resolution du probleme des huit reines. */ public class HuitReines { public static void main(String[] args) { int i; Reine q = null; for (i = 1; i <= 8; i++) { q = new Reine(i, q); if (!q.trouveSolution()) { System.out.println("Aucune solution."); return; } } q.affiche(); } } /** * Une reine. */ class Reine { private final int colonne; private int rangee; private Reine voisine; Reine(int colonne, Reine r) { this.colonne = colonne; rangee = 1; voisine = r; } public boolean trouveSolution() { if (voisine == null) return true; while (voisine.peutAttaquer(colonne, rangee)) if (!avance()) return false; return true; } public boolean peutAttaquer(int c, int r) { if (c == colonne || r == rangee || (c - colonne) == (r - rangee) || (c - colonne) == (rangee - r)) return true; if (voisine == null) return false; return voisine.peutAttaquer(c, r); } public boolean avance() { if (rangee < 8) { rangee++; return true; } if (voisine == null) return false; rangee = 1; return voisine.solutionSuivante(); } public boolean solutionSuivante() { return avance() && trouveSolution(); } public void affiche() { if (voisine != null) voisine.affiche(); System.out.println("(" + colonne + ", " + rangee + ")"); } }