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 :

Tous les chemins d'un graphe


Sujet :

Algorithmes et structures de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Points : 64
    Points
    64
    Par défaut Tous les chemins d'un graphe
    Bonjour,

    Je suis à la recherche d'un algorithme qui donne tout les chemins possible d'un graphe à partir d'un certain sommet.
    Si possible qu'il soit adapté à ma structure de graphe qui est représenté tel que chaque sommet a une liste de ses voisins et un identifiant unique.


    Merci d'avance pour votre aide !

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Points : 129
    Points
    129
    Par défaut
    Bonjour,
    Si tu ne donnes pas de contraintes il y en a une infinité...
    On fait une récursion mais il faut un test pour l'arrêt ( longueur ou arrivée sur un nœud donné ou autre)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Points : 64
    Points
    64
    Par défaut
    Arf oui c'est vrai. Et bien sans cycle et il faut parcourir tout les nœuds.

    J'avais dans l'idée d'utiliser le parcours en profondeur, c'est-à-dire de parcourir un chemin jusqu'au dernier nœud non visité, de revenir à l'avant dernier noeud pour regarder si il a d'autre voisins non visité puis revenir encore en arrière etc...
    Je vois bien ce qu'il faut faire mais j'ai du mal à l'écrire correctement (encore moins à le programmer)

  4. #4
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Points : 129
    Points
    129
    Par défaut
    Il faut préciser encore ton type de graphe pour qu'on prenne la solution la mieux adaptée.
    Est-ce un arbre?
    Est-il orienté?
    Peut-on joindre deux nœuds par deux chemins différents?

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Points : 64
    Points
    64
    Par défaut
    Mon type graphe est représenté par un sommet et une liste des voisins de ce sommet. Il est non orienté et il y a plusieurs chemins d'un sommet à l'autre.

    En fait c'est une grille de lettre, et je dois trouver tout les mots possibles en prenant les lettres adjacentes (chaque lettre a plusieurs voisins, de 5 à 8).

  6. #6
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Points : 129
    Points
    129
    Par défaut
    Heu...si il n'est pas orienté et qu'il y a plusieurs chemins d'un nœud à l'autre il va y avoir des cycles et donc une infinité de chemins...
    On tourne en rond, je pense que tu devrais reposer ton problème de façon plus
    précise

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Points : 64
    Points
    64
    Par défaut
    Non justement j'ai précisé sans cycles

  8. #8
    Membre habitué
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2013
    Messages : 72
    Points : 129
    Points
    129
    Par défaut
    Imagine un arbre (construit à partir de ton graphe)
    la racine est le noeud de départ et les fils sont les noeuds voisins (pris dans un ordre fixé). Cet arbre est infini mais on le parcourt en profondeur avec comme test d'arrêt que le fils examiné est déjà dans la liste ; ainsi on est sûr que le parcours est fini.

    Je ne sais pas dans quel langage tu codes donc en pseudo code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    List<Noeud> listeCourante = new List<Noeud>;
    List<List<Noeud> > tousLesChemins = new List<List<Noeud> >;
    Noeud leNoeudDeDepart;
    leNoeudDeDepart.examiner(listeCourante, tousLesChemins);
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    void Noeud::examiner(List<Noeud> liste, List<List<Noeud> > total)
    {
        if( ! this.estDans( liste ))
        {
            List<Noeud> nouvelle = new List<Noeud>(liste); // recopie
            nouvelle.add(this);
            total.add(nouvelle);
            foreach fils in lesNoeudsVoisins
            {
                fils.examiner(nouvelle, total);
            }
        }
    }
    à la fin tous les chemins sont dans....tousLesChemins
    il reste la liste vide du début à supprimer
    je te laisse choisir au niveau du passage des paramètres

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 152
    Points : 64
    Points
    64
    Par défaut
    Merci beaucoup, je vais tester ça en java !

    Edit : Je confirme que ça marche très bien en java, encore merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/12/2014, 00h27
  2. Trouver tous les chemins entre deux noeuds dans un graphe qui contient des boucles
    Par GayaStudent dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 21/11/2014, 21h31
  3. Parcours de tous les chemins d'un graphe
    Par piotrr dans le forum Mathématiques
    Réponses: 43
    Dernier message: 04/06/2014, 16h43
  4. tous les chemins dans un graphe
    Par tunnour dans le forum Mathématiques
    Réponses: 3
    Dernier message: 29/12/2009, 16h48
  5. [Graphe] Extraire tous les chemins de toutes tailles.
    Par Choupi dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 10/05/2006, 15h47

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