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

Mathématiques Discussion :

Trouver tous les chemins entre deux points dans un graphe orienté


Sujet :

Mathématiques

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Trouver tous les chemins entre deux points dans un graphe orienté
    Bonjour à tous,


    A force de me creuser la tête j'ai réussis à trouver une méthode me trouvant un chemin possible mais je n'arrive pas à me servir de la récursivité dans ma méthode pour tous les trouver. Car si mon sommet est marqué alors il n'y repasse pas alors que moi je ne veux pas qu'il repasse par un sommet déjà marqué dans un chemins mais dans les autres chemins, je veux qu'il puisse y retourner ! ^^

    Voici mon code :

    ma classe hérite d'une classe graphe où dans cette classe se trouve plusieurs méthode comme la liste des successeurs d'un sommet (réc ses prédécesseurs), le nombre de sommets etc.


    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    import java.util.*;
     
    public class Cheminement extends Graphe{
     
    //Vecteur dans lequel je stock mon chemin
    private Vector<Integer> tab= new Vector<Integer>();
    //tableau de boolean pour marquer un sommet et savoir s'il a déjà été visité
    private boolean [] marque = new boolean[1000];
     
     
    public void chemins(Graphe g, int depart, int arrivee){
    int courant = depart;
    for(int i=0; i<g.nbSommet(); i++){
    marque[i] = false;
    }
     
    //Une pile P qui se rempli et se vide au fur et à mesure et permet de sortir de ma boucle while
    Stack<Integer> P = new Stack<Integer>();
     
    marque[depart] = true;
    P.push(depart);
    while(!(P.isEmpty())	&& courant!=arrivee){
    courant = P.pop();
    tab.add(courant);
    for(int i=0; i<g.lst_succ(courant).length; i++){
    if(marque[g.lst_succ(courant)[i]] == false){
    P.push(g.lst_succ(courant)[i]);
    marque[g.lst_succ(courant)[i]] = true;
    }//fsi
    }//fpour
    }//fwhile
    }//CheminHami
     
     
     
    public java.lang.String toString(){
    String str = "chemin : { ";
    for(int i=0; i<tab.size(); i++){
    str+= tab.get(i) + ", ";
    }
    str+="}";
     
    return str;
    }
     
     
    public static void main(String[] args) {
    Cheminement c1 = new Cheminement();
     
    int A = Graphe.Alpha_NotDef; //Permet de dire qu'il n'y a pas d'arc entre les sommets
    int [][]mat = {{A,2,2,A,A,A}, {A,A,A,A,2,A}, {A,2,A,2,A,A}, {A,A,A,A,A,2},{A,A,2,2,A,A}, {A,A,A,A,2,A}}; //Matrice d'adjacence de mon graphe g
    Graphe g = new Graphe(mat); //Mon graphe g construit avec le constructeur par matrice
     
    c1.chemins(g, 0, 5); 
    System.out.println(c1);	
     
    }
    }


    Pouriez-vous m'aider, sur mon code, à l'améliorer et me permettre de trouver tous les chemins possibles.


    Si je ne nme trompe pas, avec ce graphe (donc avec cette matrice d'adjacence), tous les chemins possibles entre le sommet 0 et le sommet 5 sont :

    0; 1; 4; 3; 5
    0; 1; 4; 2; 3; 5
    0; 2; 1; 4; 3; 5
    0; 2; 3; 5


    Parce que mon but final est de trouver tous les chemins possible reliant deux sommets passant par tous les sommets du graphe.

    Merci BEAUCOUP !!!

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 120
    Points : 9 533
    Points
    9 533
    Par défaut
    Vu de loin, en regardant les commentaires, le principe me semble bon.

    Pour ce genre de problème, je déclare une structure
    str est composé de
    tbs est un tableau de sommets
    marque est un tableau de booleens
    fin

    Et dans ma pile, je vais empiler/dépiler ces structures.

    Ici, j'ai l'impression que tu empiles une structure, et ensuite, tu modifies ton tableau marque[] ... mais ton tableau marque[] ne fait pas partie de la structure que tu empiles/dépiles.

    Mais je ne comprends pas le Javanais ; peut-être que je me trompe en lisant le code.
    Tu auras peut-être plus de réponses en postant sur le forum Java.

Discussions similaires

  1. Trouver tous les chemins possibles entre deux sommets dans un graphe orienté
    Par mhodier dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 19/02/2017, 18h52
  2. Trouver tous les chemins possibles d'un trajet (d'un point A à un point B)
    Par chakirlbr dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 16/12/2014, 14h54
  3. 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
  4. Le plus court chemin entre deux points les plus éloignés
    Par takesrit dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 30/05/2011, 18h39
  5. Réponses: 14
    Dernier message: 25/11/2007, 18h32

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