Comment utiliser l'algorithme du problème des huit reines en C++
Comment utiliser l'algorithme du problème des huit reines en C++
Le problème des huit reines est un problème d'algorithme classique qui nécessite de placer huit reines sur un échiquier 8x8 afin qu'aucune deux reines ne puisse s'attaquer, c'est-à-dire deux reines quelconques ne peut pas être dans la même ligne, colonne ou diagonale. Il existe de nombreux algorithmes pour résoudre le problème des huit reines, l'une des méthodes courantes consiste à utiliser l'algorithme de backtracking. Cet article présentera comment utiliser le langage C++ pour implémenter l'algorithme du problème des huit reines et fournira des exemples de code spécifiques.
Tout d'abord, nous devons définir un échiquier 8x8, représenté par un tableau bidimensionnel. Chaque élément du tableau peut représenter une grille d'échiquier, 1 signifie qu'il y a une reine sur la grille, 0 signifie qu'il n'y a pas de reine.
Ensuite, nous définissons une fonction récursive pour parcourir chaque ligne du plateau et essayer de placer la reine. Les étapes spécifiques sont les suivantes :
- Si vous avez atteint la dernière ligne de l'échiquier, cela signifie que vous avez trouvé une solution, enregistrez l'état actuel de l'échiquier et revenez.
- Parcourez chaque grille de la rangée actuelle et essayez de placer la reine.
- Si la grille actuelle ne remplit pas les conditions de placement de la reine (c'est-à-dire qu'elle entre en conflit avec la reine déjà placée), la grille actuelle sera ignorée et la grille suivante continuera à être parcourue.
- Si la grille actuelle remplit les conditions pour placer une reine, placez une reine sur la grille et marquez la grille comme occupée.
- Appelez la fonction de manière récursive et parcourez la ligne suivante.
- Si le résultat de l'appel récursif renvoie vrai, cela signifie qu'une solution a été trouvée, alors la solution sera enregistrée et vrai sera renvoyé.
- Si le résultat de l'appel récursif renvoie faux, cela signifie que le placement de la grille actuelle ne répond pas aux exigences de la solution, alors retirez la reine de la grille et revenez à l'étape précédente.
Sur la base des idées ci-dessus, nous pouvons implémenter le code suivant :
#include <iostream> #include <vector> using namespace std; const int n = 8; // 棋盘大小 // 棋盘 int chessboard[n][n]; // 保存解法的容器 vector<vector<int>> solutions; // 检查当前格子上是否可以放置皇后 bool isValid(int row, int col) { // 检查同一列上是否有皇后 for (int i = 0; i < row; i++) { if (chessboard[i][col] == 1) return false; } // 检查左上对角线上是否有皇后 for (int i = row, j = col; i >= 0 && j >= 0; i--, j--) { if (chessboard[i][j] == 1) return false; } // 检查右上对角线上是否有皇后 for (int i = row, j = col; i >= 0 && j < n; i--, j++) { if (chessboard[i][j] == 1) return false; } return true; } // 解决八皇后问题的递归函数 bool solveNQueens(int row) { // 如果已经遍历到最后一行,表示找到了一种解法,将当前棋盘状态保存下来 if (row == n) { vector<int> solution; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (chessboard[i][j] == 1) solution.push_back(j); } } solutions.push_back(solution); return true; } // 遍历当前行的每一个格子,尝试放置皇后 for (int col = 0; col < n; col++) { // 如果当前格子满足放置皇后的条件,标记该格子为已占用 if (isValid(row, col)) { chessboard[row][col] = 1; // 递归调用函数,遍历下一行 solveNQueens(row + 1); // 如果递归调用的结果返回false,表示当前格子的放置方式不满足解法要求,回溯到上一步 chessboard[row][col] = 0; } } return false; } // 打印解法 void printSolutions() { for (auto solution : solutions) { cout << "Solution:" << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { if (j == solution[i]) cout << "Q "; else cout << ". "; } cout << endl; } cout << endl; } } int main() { solveNQueens(0); printSolutions(); return 0; }
Exécutez ce programme et toutes les solutions seront affichées. Chaque solution est affichée sous la forme d'un damier, où Q représente la reine et . Avec cet algorithme, nous pouvons trouver toutes les solutions au problème des huit reines.
J'espère que cet article vous aidera à comprendre comment utiliser l'algorithme Eight Queens Problem en C++. La mise en œuvre de cet algorithme nécessite l'utilisation d'idées de récursion et de retour en arrière. Tant que vous suivez les bonnes étapes, vous pouvez trouver la solution au problème des huit reines.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

01Aperçu des perspectives Actuellement, il est difficile d'atteindre un équilibre approprié entre efficacité de détection et résultats de détection. Nous avons développé un algorithme YOLOv5 amélioré pour la détection de cibles dans des images de télédétection optique haute résolution, en utilisant des pyramides de caractéristiques multicouches, des stratégies de têtes de détection multiples et des modules d'attention hybrides pour améliorer l'effet du réseau de détection de cibles dans les images de télédétection optique. Selon l'ensemble de données SIMD, le mAP du nouvel algorithme est 2,2 % meilleur que YOLOv5 et 8,48 % meilleur que YOLOX, permettant ainsi d'obtenir un meilleur équilibre entre les résultats de détection et la vitesse. 02 Contexte et motivation Avec le développement rapide de la technologie de télédétection, les images de télédétection optique à haute résolution ont été utilisées pour décrire de nombreux objets à la surface de la Terre, notamment des avions, des voitures, des bâtiments, etc. Détection d'objets dans l'interprétation d'images de télédétection

Les étapes pour implémenter le modèle de stratégie en C++ sont les suivantes : définir l'interface de stratégie et déclarer les méthodes qui doivent être exécutées. Créez des classes de stratégie spécifiques, implémentez l'interface respectivement et fournissez différents algorithmes. Utilisez une classe de contexte pour contenir une référence à une classe de stratégie concrète et effectuer des opérations via celle-ci.

La gestion des exceptions imbriquées est implémentée en C++ via des blocs try-catch imbriqués, permettant de déclencher de nouvelles exceptions dans le gestionnaire d'exceptions. Les étapes try-catch imbriquées sont les suivantes : 1. Le bloc try-catch externe gère toutes les exceptions, y compris celles levées par le gestionnaire d'exceptions interne. 2. Le bloc try-catch interne gère des types spécifiques d'exceptions, et si une exception hors de portée se produit, le contrôle est confié au gestionnaire d'exceptions externe.

Compter semble simple, mais en pratique, c'est très difficile. Imaginez que vous êtes transporté dans une forêt tropicale vierge pour effectuer un recensement de la faune. Chaque fois que vous voyez un animal, prenez une photo. Les appareils photo numériques enregistrent uniquement le nombre total d'animaux suivis, mais vous êtes intéressé par le nombre d'animaux uniques, mais il n'y a pas de statistiques. Alors, quelle est la meilleure façon d’accéder à cette population animale unique ? À ce stade, vous devez dire : commencez à compter maintenant et comparez enfin chaque nouvelle espèce de la photo à la liste. Cependant, cette méthode de comptage courante n'est parfois pas adaptée aux informations pouvant atteindre des milliards d'entrées. Des informaticiens de l'Institut indien de statistique, UNL, et de l'Université nationale de Singapour ont proposé un nouvel algorithme : le CVM. Il peut approximer le calcul de différents éléments dans une longue liste.

L'héritage de modèle C++ permet aux classes dérivées d'un modèle de réutiliser le code et les fonctionnalités du modèle de classe de base, ce qui convient à la création de classes avec la même logique de base mais des comportements spécifiques différents. La syntaxe d'héritage du modèle est : templateclassDerived:publicBase{}. Exemple : templateclassBase{};templateclassDerived:publicBase{};. Cas pratique : création de la classe dérivée Derived, héritage de la fonction de comptage de la classe de base Base et ajout de la méthode printCount pour imprimer le décompte actuel.

Causes et solutions pour les erreurs Lors de l'utilisation de PECL pour installer des extensions dans un environnement Docker Lorsque nous utilisons un environnement Docker, nous rencontrons souvent des maux de tête ...

En C, le type de char est utilisé dans les chaînes: 1. Stockez un seul caractère; 2. Utilisez un tableau pour représenter une chaîne et se terminer avec un terminateur nul; 3. Faire fonctionner via une fonction de fonctionnement de chaîne; 4. Lisez ou sortant une chaîne du clavier.

En C++ multithread, la gestion des exceptions est implémentée via les mécanismes std::promise et std::future : utilisez l'objet promise pour enregistrer l'exception dans le thread qui lève l'exception. Utilisez un objet futur pour rechercher des exceptions dans le thread qui reçoit l'exception. Des cas pratiques montrent comment utiliser les promesses et les contrats à terme pour détecter et gérer les exceptions dans différents threads.
