IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Projet C - labyrinthe


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Projet C - labyrinthe
    Bonjour à tous,

    Je dois concevoir un labyrinthe et le résoudre.
    J'utilise un automate cellulaire avec 7 états (cela fait parti de la consigne) :

    * -1 : sortie
    * 0 : case libre
    * 1 : mur
    * 2 : aller à gauche
    * 3 : aller à droite
    * 4 : aller en haut
    * 5 : aller en bas

    J'ai décidé de partir de la sortie pour inspecter (via une file) toutes les cases libre (à l'état 0), jusqu'à arriver à l'entrée (0,0). Pendant le parcours, je calcule le voisinage en attribuant un état à chaque cellule parcourue. Une fois arrivée à l'entrée, la boucle s'arrête et je trace le chemin (parcours inverse)

    Mon problème :
    Certains états de cellule du laby ne sont pas bons, et plus particulièrement au niveau des carrefours

    Je vous mets une image du résultat (laby sous forme de matrice)

    Merci beaucoup pour votre aide

    PS : dites-moi si vous avez besoin de bout de code...
    Images attachées Images attachées  

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Ashantyy Voir le message
    J'ai décidé de partir de la sortie pour inspecter (via une file) toutes les cases libre (à l'état 0), jusqu'à arriver à l'entrée (0,0). Pendant le parcours, je calcule le voisinage en attribuant un état à chaque cellule parcourue. Une fois arrivée à l'entrée, la boucle s'arrête et je trace le chemin (parcours inverse)
    Bonjour

    L'algorithme pour traverser un labyrinthe est assez simple. A l'entrée on place sa main gauche sur le mur de gauche et ensuite on avance en gardant toujours la main collée au mur. Fatalement à un moment ou à un autre on arrive à la sortie. (Et ça marche aussi avec la main droite).

    Citation Envoyé par Ashantyy Voir le message
    Certains états de cellule du laby ne sont pas bons, et plus particulièrement au niveau des carrefours
    Ben je vois ça oui. Première case en haut à gauche (donc l'entrée si je suis bon) est à 0 (case libre). Où je vais alors ? En bas ? A droite ?
    Autre exemple: Première case en bas à gauche est à 5 (aller en bas) alors qu'on est déjà tout en bas !!!


    Citation Envoyé par Ashantyy Voir le message
    PS : dites-moi si vous avez besoin de bout de code...
    Ben oui, surtout qu'on ne l'écrira pas à ta place...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Ce dont nous aurions besoin c'est tout d'abord de la description précise de l'algorithme utilisé.

    Il y a deux sortes d'erreurs : les erreurs de logique (la méthode est incorrecte) et les erreurs d'implémentation (la méthode est correcte mais on n'a pas su l'expliquer à la machine). Connaître l'algorithme et ses entrées et sorties nous permettrait déjà de déterminer si la logique est viable.

  4. #4
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    La description précise de l'algorithme c'est :
    à partir de la sortie, et n'avoir à viser que les case à l'état 0 (libres), ça éviterait de parcourir toutes les cases.
    De là, on inspecte les cases libres voisines, on met leurs coordonnées dans une pile ou une file (j'ai testé avec les 2 mais le résultat est le même), et on les traite avec la fonction voisinage qui va permettre d'attribuer un état à la case courante. Seulement parfois, il y a des impasses dans le labyrinthe, et du coup pour le peu que le "bon chemin" soit traité après l'impasse,'état de la case courante ne sera pas bon...j'espère que vous comprenez ce que je veux dire

    Merci beaucoup

  5. #5
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    Ça me semble un peu confus, as-tu écrit ton algorithme en français avant de te lancer dans l'implémentation ?

    Peut-être retires-tu les cellules trop tôt de la liste ? À ta place j'aurais d'abord considéré l'ensemble du labyrinthe à chaque tour (sans file), en mettant à jour toutes les cases qui ne sont pas des murs, afin de valider le processus de simulation.

    Une erreur courante dans l'implémentation des automates cellulaires est de mettre à jour le jeu de données que l'on est en train de consulter, effaçant ainsi une partie des informations du tour précédent. Il est souvent nécessaire d'utiliser deux grilles que l'on intervertit à chaque étape : le jeu de données du tour n - 1 devient celui du tour n + 1, celui du tour n devient celui du tour n + 2, etc..

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 115
    Points : 32 967
    Points
    32 967
    Billets dans le blog
    4
    Par défaut
    Cela ressemble à une description maladroite de A* : https://fr.wikipedia.org/wiki/Algorithme_A*

    Sinon, pourquoi ne pas ajouter d'autres états ? "tentative d'aller en haut", "tentative de chemin du bas", ... et si le chemin s'avère faux, tu reviens en arrière jusqu'à trouver une case validée et pars dans une autre direction.
    Ou plus simplement avec l'algo de svear : si tu reviens sur une case où tu es déjà passé puisque tu as été dans une impasse, tu réinitialises toutes ces cases et prends le chemin suivant.
    Es-tu sûr que ton labyrinthe a toujours une solution ? Sinon tu pourrais avoir des surprises à base de boucles infinies.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Expert confirmé
    Inscrit en
    Mars 2005
    Messages
    1 431
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 1 431
    Points : 4 182
    Points
    4 182
    Par défaut
    C'est un automate cellulaire a priori, donc pas un Dijkstra/A*. Chaque cellule n'a conscience que de ses voisines.

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Avril 2018
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Bousk Voir le message
    Cela ressemble à une description maladroite de A* : https://fr.wikipedia.org/wiki/Algorithme_A*

    Sinon, pourquoi ne pas ajouter d'autres états ? "tentative d'aller en haut", "tentative de chemin du bas", ... et si le chemin s'avère faux, tu reviens en arrière jusqu'à trouver une case validée et pars dans une autre direction.
    Ou plus simplement avec l'algo de svear : si tu reviens sur une case où tu es déjà passé puisque tu as été dans une impasse, tu réinitialises toutes ces cases et prends le chemin suivant.
    Es-tu sûr que ton labyrinthe a toujours une solution ? Sinon tu pourrais avoir des surprises à base de boucles infinies.
    Oui c'est vrai que cela peut-être une solution, comment pourrais-je faire ? il faudrait détecter les carrefours et les impasses..

    Mon laby a normalement toujours une solution car j'ai utilisé l'algo fusion des chemins pour pouvoir le générer, donc il n'y a pas de soucis pour ça je pense

    Sinon oui je l'ai écris avant, mais j'ai peut-être du mal à être clair, et je m'en excuse

Discussions similaires

  1. Projet informatique_ Labyrinthe
    Par beranger21 dans le forum Programmation multimédia/Jeux
    Réponses: 1
    Dernier message: 10/03/2016, 17h31
  2. Défi Pascal 2012 : Labyrinthe - Projet de Roland Chastain
    Par Roland Chastain dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 10/02/2013, 11h52
  3. Défi Pascal 2012 : Labyrinthe - Projet de Paul TOTH
    Par Paul TOTH dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 10/02/2013, 11h48
  4. Défi Pascal 2012 : Labyrinthe - Projet de debisch : le gagnant
    Par debisch dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 10/02/2013, 11h43
  5. Projet labyrinthe à réaliser
    Par lenneth666 dans le forum Prolog
    Réponses: 2
    Dernier message: 08/12/2006, 20h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo