Aller au contenu

Problème des N-Reines

Backtracking classique sur échiquier

Exercice Avancé · Algorithmique · prepa scientifique et economique (CPGE)

Enonce

Implémenter n_reines(n) qui renvoie le nombre de placements valides distincts de $n$ reines sur un échiquier $n \times n$.

On attend par exemple n_reines(4) == 2, n_reines(8) == 92.

⚠ Méthode : backtracking récursif. Placer une reine par ligne, élaguer dès qu'un conflit apparaît.

Signature attendue

def n_reines(n: int) -> int:

Exemples

  • n_reines(1) → 1
  • n_reines(2) → 0 (impossible)
  • n_reines(3) → 0 (impossible)

📖 Rappel de cours

Problème historique (1848, Max Bezzel) : placer $n$ reines sur un échiquier $n \times n$ de telle sorte qu'aucune ne puisse en attaquer une autre. Deux reines s'attaquent si elles sont sur la même ligne, la même colonne ou la même diagonale.

Stratégie (backtracking) :

  1. On place une reine par ligne (il ne peut y en avoir qu'une par ligne).
  2. Pour la ligne $\ell$, on essaie chaque colonne $c \in \{0, \ldots, n-1\}$.
  3. Si $(l, c)$ ne conflit avec aucune des reines déjà placées : on avance à la ligne suivante, sinon on essaie une autre colonne.
  4. Si on a placé toutes les reines : solution trouvée. Si plus aucune colonne ne marche : on revient en arrière (backtrack).

Test de conflit diagonal :

Deux cases $(l_1, c_1)$ et $(l_2, c_2)$ sont sur une même diagonale ssi $|c_1 - c_2| = |l_1 - l_2|$.

Valeurs : $n = 4 \to 2$ solutions, $n = 8 \to 92$, $n = 10 \to 724$, $n = 12 \to 14200$.

← Exercices d'algorithmique en Python — tris, dichotomie, récursivité

Exercices du meme theme

  • Chemins dans une Grille
  • Distance d'Édition (Levenshtein)
  • Rendu de Monnaie (DP)
  • Traitement d'Image — Seuillage et Barycentre
  • Algorithme de Bresenham

La correction commentee, les indices progressifs, l'execution du code dans le navigateur et la verification par l'IA sont reserves aux abonnes.

Prepa🐍ython
Progresser en Python & SQL · Prépa scientifique
Essai gratuit
Testez toutes les fonctionnalités sans engagement
En continuant, vous acceptez notre politique de confidentialité.
Déjà abonné ? Se reconnecter
Recevez un lien de connexion par email
Parcourir gratuitement →
Aperçu limité · sans inscription · sans vérification IA
€4,99
/ mois · accès illimité · résiliable
Paiement sécurisé
En vous abonnant, vous acceptez nos conditions et politique de confidentialité.
Résiliation possible depuis votre espace PayPal.

Chargement...

Initialisation de l'environnement

Prepa🐍ython
Progresser en Python & SQL · Prépa scientifique
Progression
0 / 0
Solo
— / —
Python... SQL...
Recherche
🔬 Bac a sable Python ↗ 🧪 Bac a sable SQL ↗ 📝 Concours blanc ↗ 🏖️ Code à la plage ↗ 📚 Listes de rentrée ↗ 🛠️ Admin ↗
Tu aimes PrepaPython ?
Fais-le savoir !
← Retour à l'accueil Mentions legales & confidentialite