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

Algorithmes et structures de données Discussion :

Labyrinthes et imperfection


Sujet :

Algorithmes et structures de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sourivore
    Homme Profil pro
    Lead Tech Front-End
    Inscrit en
    Juin 2005
    Messages
    451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lead Tech Front-End

    Informations forums :
    Inscription : Juin 2005
    Messages : 451
    Par défaut Labyrinthes et imperfection
    Bonjour à tous,

    A l'aide d'un algorithme j'ai obtenu un labyrinthe parfait.
    Donc entre 2 cases il y a un et un seul chemin.
    Maintenant j'aimerais pouvoir éviter la résolution à la main gauche ("Je tourne toujours à gauche").
    Ainsi à partir de mon labyrinthe parfait j'aimerais créer un labyrinthe "imparfait" (avec quelques cycles).

    Quelle est le meilleur algorithme possible pour effectuer cela?

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 371
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 371
    Par défaut
    Bien le bonjour,

    A première vue, je dirais que tu dois casser quelques murs de ton labyrinthe. S'il est parfait, (construit à partir d'un ensemble de Tarjan, non ?), il y a un seul chemin pour aller de n'importe quel endroit à n'importe quel autre endroit.
    Tu as donc le nombre maximal de murs pour ta configuration.
    Toute suppression de mur va créer des chemins doublons.

    Deux chemins pour aller de A à B tu peux tourner en rond.

    Tu choisis les murs à casser aléatoirement, ça marchera très bien. Le nombre de murs à casser dépend de la taile de ton labyrinthe et du niveau d'imperfection que tu veux ajouter.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Par défaut
    oui casser des murs et la solution la plus simple !!

    Par contre il y a des cas ou tu risques de ne créer que des impasses.....et pas de cycle !!! Donc le résultat ne peut etre efficace qui si tu casses un certain nombre de mur...

    Solution bourinne : t'enlèves tout les murs !!! (bon ok le mec en main gauche vas trouver la sortie en suivant les bords....)

    Si tu veux etre super vicieux : l'entrée ou la sortie du labyrinthe n'est pas forcement sur un bord !!! Pourquoi ne pas en avoir un qui a une sortie par les sous sols ?

    Bon sinon revnons sérieux sur ta demande de base (quoique les 2 techniques décrites surtout la 2ème fait bien chier un main gauche )

    Je pense qu'il faut que tu te tournes vers la théorie des arbres et graphes pour résoudre ton probleme....
    C'est ptet sortir un peu les grands moyen, mais si on regarde de plus pres, un labyrinthe parfait correspond a un arbre, un labyrinthe non parfait à un graphe avec des cycles....
    Donc l'idée serait de schématiser ton laby parfait en arbre, puis de faire en sorte par construction de le transformer en graphe avec des cycles...

    Je me souviens plus trop des algos, mais ca doit pouvoir se retrouver qqpart !!

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Par défaut
    sinon au fait tu sais sortir de la maniere la plus courte de ton labyrinthe parfait (bon ok la plus courte c pas dur, y'a k'une maniere de sortir !!)

    Et pour un labyrinthe vicieux, sais tu le faire?

    Si c non, les graphes t'aideront grandement.....

    Sinon il existe une maniere simple et intuitive qui se ramène à la théorie des graphes mais qui marche tres bien (si tu connais pas de solution, cherches un peu tu devrais pouvoir trouver une idée efficace assez rapidement)

  5. #5
    Membre éclairé Avatar de sourivore
    Homme Profil pro
    Lead Tech Front-End
    Inscrit en
    Juin 2005
    Messages
    451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Lead Tech Front-End

    Informations forums :
    Inscription : Juin 2005
    Messages : 451
    Par défaut
    Merci pour vos réponses,

    Je vais essayer de casser quelques murs (par contre combien pour un labyrinthe nxn je ne sais pas encore)

    En ce qui concerne la solution de plus courte chemin en fait elle m'importe peu étant donné que tout ce que je veux c'est qu'il y ait au moins une solution.

    Sebus l'idée du sous-sol en fait est ce à quoi je pensais.
    Tu démarres en haut à gauche et tu dois aller jusqu'à une case sous conditions.

    En fait tout ceci est pour le site que je fais je vais vous expliquer les grandes lignes ainsi que les questions qui restent en suspens.

    Ce site est un site avec authentification. Ainsi chaque joueur aura son propre personnage.
    A la connexion ainsi qu'à la fin d'un labyrinthe, un nouveau labyrinthe est créé.
    Le joueur se retrouve dans ce labyrinthe et son but est d'aller vers la sortie.
    Le joueur aura un certain nombre de déplacement par heure.

    A ceci s'ajoute plusieurs principes :

    - Des portes qui ne peuvent s'ouvrir qu'avec des cles qui se trouvent dans le labyrinthe.
    - Des trappes qui ouvrent des murs du labyrinthe
    - Pour pouvoir sortir, il faudra trouver la sortie + 3 objets disséminés dans le labyrinthe.
    - D'autres options à déterminer comme les pièges, des marchands, des combats, des rencontres avec d'autres joueurs...
    Question en suspens :

    - Comment stocker efficacement dans ma BDD MySQL un labyrinthe (en effet un labyrinthe est nominatif pour éviter que les joueurs se filent des tuyaux)?
    Mon labyrinthe doit faire 30x30 et je voudrais trouver une manière plus efficace que de stocker des chaines de 900 caractères pour chaque joueur.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 221
    Par défaut
    Si tu utilises la technique de casser des murs, il va falloir que tu tests tes labyrinthes pour savoir si tu as bien un cycle ou non...

    L'idée du sous sol c'est en gros ben la sortie au milieu du labyrinthe comme si on trouvait la trappe providentielle...

    Pour stocker en base, apart stocker une chaine de caracteres ou des bits (ca je ne pense pas que ce soit faisable) ba y'a pas grand chose d'autre a faire ......
    Fo bien de toute facon stocker chaque case en sachant si cette case est un mur ou non ......

    Mais sinon a koi te sert ta base? tu pourrais pas utiliser du XML ou des fichiers plat ?

Discussions similaires

  1. Réponses: 27
    Dernier message: 06/05/2012, 12h07
  2. Réponses: 1
    Dernier message: 30/04/2006, 14h24
  3. Trouver son chemin dans un labyrinthe
    Par APoLLoN1234 dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 03/11/2005, 22h34
  4. Labyrinthe : aller d'un point A vers un point B
    Par genova dans le forum Algorithmes et structures de données
    Réponses: 26
    Dernier message: 31/05/2005, 15h23
  5. algo de Dijkstra (+ court chemin d'un labyrinthe)
    Par gg14bis dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 25/03/2005, 08h57

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