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 :

[Path Finding] Algorithme A star


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut [Path Finding] Algorithme A star
    Bonjour à tous,

    Je dois créer un algorithme de recherche du plus court chemin pour mon jeux vidéo 2D. J'ai bien compris le principe de l'algo en allant sur le net mais pour son implémentation en C, je bloque.

    J'ai déjà créé une structure pour chaque noeud (case) :
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct noeud
    {
    int x, y;
    int cout_f, cout_g, cout_h;
    struct noeud * parent;
    }
    Mais est ce que je dois utiliser des listes chainées obligatoirement pour coder cet algorithme en C ? Je ne vois pas comment créer les listes ouvertes et fermés

    Merci beaucoup
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Bonjour,
    Je ne vois pas ce que tu appelles listes ouvertes ou fermées. Peux-tu élaborer?

    Au niveau de la structure que tu as créée: Si c'est pour un arbre, alors c'est le format le moins efficace qui existe: L'arbre à chaînage inversé. Ce format peut être sympa pour stocker des données sérialisées (je crois qu'il est assez populaire dans une table de base de données), mais PITA pour manipuler des données en mémoire.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre Expert
    Avatar de Aspic
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    3 905
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2005
    Messages : 3 905
    Par défaut
    Salut,

    Les listes ouvertes et fermés sont celles utilisées dans l'algorithme :
    http://khayyam.developpez.com/articl...o/astar/#LII-1

    Et je n'utilise pas d'arbre, j'utilise une matrice pour découper mon terrain de jeu, exactement comme dans le lien que je viens de te donner.

    Le seul hic, c'est que c'est codé en C++ et non en C et en C++, c'est un langage orienté objet donc plus facile de coder l'algorithme

    Mon problème réside dans la création d'une liste pour stocker des "objets" de type noeud (cf mon typedef) avec les opérations de base (ajout, suppression, insertion).

    Merci
    Qui ne tente rien n'a rien !
    Ce qui ne nous tue pas nous rends plus fort !!
    Mon projet ZELDA en C++/Allegro
    http://www.tutoworld.com - Le Forum -
    Mes ressources Dotnet (cours, sources, tutos)
    --------------------------------------------
    + + =

    Ne pas oublier le Tag !

  4. #4
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    J'avais fait un code réutilisable sympa pour des listes simplement chaînées en C, mais je ne l'ai pas sous la main. Il faudrait que tu me contactes ce soir pour me le demander. Sinon, tu peux essayer de contacter Cyrine, je le lui avais envoyé...

    Sinon, tu peux peut-être essayer les conteneurs de la GLib, je ne m'y suis jamais attaqué, mais j'ai "entendu" dire qu'elle était sympa.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirmé Avatar de sopsag
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    224
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 224
    Par défaut
    Juste pour info, il y a aussi l'algorithme de Dijkstra pour trouver le plus court chemin. L'inconvénient c'est qu'il ne tient pas compte des info topologiques, mais l'avantage c'est qu'il te garantit le plus court.

    http://fr.wikipedia.org/wiki/Algorithme_de_Dijkstra

    Hadrien

  6. #6
    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
    Tu n'es pas obligé de prendre des listes, tu peux partir sur des tableaux si ça te chante. C'est juste que l'algorithme nécessite de passer des éléments d'un tableau à un autre (donc avec suppression en milieu de tableau).

    La liste chainée est en effet une bien meilleure structure de données que le tableau pour le A* (la liste chainée triée peut même être plus performante encore).

    http://nicolasj.developpez.com/articles/listesimple/ ?

Discussions similaires

  1. Améliorer mon algorithme A star
    Par kump_ dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 16/08/2009, 15h22
  2. Path finding 3D dynamique et pas cher ?
    Par Harooold dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 25/03/2009, 10h17
  3. Algorithme A Star
    Par Rumpel dans le forum Intelligence artificielle
    Réponses: 3
    Dernier message: 22/01/2009, 17h19
  4. Réponses: 1
    Dernier message: 14/12/2008, 23h39
  5. [path finding] Recherche d'un chemin "plus rapide"
    Par ReiVon dans le forum Intelligence artificielle
    Réponses: 9
    Dernier message: 29/11/2008, 10h31

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