Outils pour utilisateurs

Outils du site


nsi:tds:jeux:labyrinthe_solver

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Solution d'un labyrinthe

Données

On vous fournit un labyrinthe sous forme d'un fichier texte.

  • Les murs sont symbolisés par le caractère *,
  • le point de départ, qui doit être unique, est symbolisé par le caractère D,
  • les arrivées (il en faut au moins une) sont symbolisées par le caractère A.

Voici un exemple :

*******************
*D*          *A   *
* ******** ****** *
*                 *
*******************

Vous pouvez télécharger laby_exemple.txt dont le contenu est :

****************************************************************************************
*         *                                    ** *                                    *
**** ****** **********************************    * * *******************************  *
* *         *                                * ****** *                                *
* * **** **** ****************************** * *      * ******* ************** ******* *
* * * *     * *   *                  *     * * * ****** *   * * *   **       * *     * *
*   * * **  *   *   * ************** *  **** * *      *   *   *   ***  ***** * * ***   *
***** * *   * *********  * *         *       * ****** * *********** ** *   * * *     * *
*     * * *** *          *   ************  *** *      * *            * * *   * ******* *
* ***** * *   *       ********     *       *   * * ** * * ********** * ******* *       *
*       * * *** *******      * *** * ******* *** ***  * * *        * * * *   * * * *****
********* * *   *     * **** * * * *       *       **** * * ****** * *   * * *   * *   *
*   *   *     ******* * *  * * *   ** **** ******* *    * * *    * * * * * * *** * * * *
* * * * *******   *   * * ** * * ******* * *     * * **** * * ** * * * * * *     * * * *
* * * * *     * *   *   *    * *         * * *** * * *  * * * *A * * * * * * * * *   * *
* *   * * ***** ************** *********** * * * * * *  * * * **** * * * * * * * ***** *
* ***** *  *                             * * *   * * *  * * *      * * * * * * *       *
*       ** * *************************** * * ***** * *  * * ******** * * * * * * *******
*** *****  * *   *   *           *       * *       *    * *          * *   *   *       *
*D  *   **** * * * * * ********* ********* ************ * ******************************
*** * * *    * * * *    *                * *        *   *                              *
* * * * * **** * * ****** ************** * ******** * * ****************************** *
* * * * *    * *        *              * * *        * *           *             *      *
* * * * * * ** ******** ************** * * * ******** *********** * * *********** ******
*     *   *             *              *   *                    *   *                  *
****************************************************************************************

Objectif

Produire un fichier texte contenant le labyrinthe et sa solution. La solution est affichée en utilisant le caractère . pour marquer les cases du chemin à suivre.

Voici un exemple :

*******************
*D*          *A...*
*.******** ******.*
*.................*
*******************

Aide

Ouverture de fichier

file = open('le_nom_du_fichier_source', 'r', encoding='utf8')
# 'r': ouverture en mode lecture
# 'utf8': précise l'encodage des caractères.
#         inutile ici car aucun caractère spécial.

texte = file.read() # texte contient la totalité du contenu du fichier

# autre possibilité :
lines = file.readlines() # lines contient un tableau dont chaque item est une ligne du fichier

file.close() # ne pas oublier de libérer le fichier

Vous pouvez ensuite poursuivre en travaillant sur texte ou sur lines selon le choix fait.

Écriture du fichier

En supposant que la variable texte contient le texte à écrire dans le fichier,

file = open('le_nom_de_fichier_cible', 'w', encoding='utf8')
# 'w': écriture
file.write(texte)
file.close()

Méthode

Une possibilité est de créer un arbre :

  • Le point de départ est la racine de l'arbre,
  • chaque fois qu'on analyse un nœud, on considère toutes les cellules voisines non encore visitées que l'on ajoute comme enfant du nœud en cours,
  • à partir du nœud racine on fait un parcours en largeur ou en profondeur – à vous de voir lequel est le mieux
  • quand on visite la cellule d'arrivée, il suffit de remonter l'arbre jusque la racine : c'est le bon chemin.

Des améliorations

On peut ajouter des complications :

  • Tenir compte d'un temps de parcours qui peut varier selon les cellules, par exemple des cellules pourraient être plus difficiles à parcourir et occasionner une pénalité. On pourrait choisir un symbole pour de telles cellules.
  • Certains passages pourraient être en sens unique.
  • Le labyrinthe pourrait se décomposer en plusieurs étages avec des ascenseurs entre les étages.
  • On peut donner au labyrinthe une représentation graphique dans un module comme tkInter.
nsi/tds/jeux/labyrinthe_solver.txt · Dernière modification : de goupillwiki