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

Calcul scientifique Python Discussion :

Problème DFS parcours de graphes [Python 3.X]


Sujet :

Calcul scientifique Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Problème DFS parcours de graphes
    Bonjour,
    J'ai besoin d'utiliser l'algorithme de DFS mais je n'arrive pas à le programmer de façon récursive pourriez-vous m'aidez ?
    Mon programme prend en entrer une liste de liste et le sommet de départ et renvoie la liste des sommets parcourus

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    def DFS(mat,src):
    	"""
            Retourne la liste des sommets rencontrés lors
            d'un parcours en profondeur issu du sommet <src>.
     
            Arguments:
            mat -- matrice d'adjacence du graphe
            src -- un sommet du graphe, départ du parcours
            """
    	visite = []
    	visite.append(src)
    	for j in range(0, len(mat)):
    		if visite[j]==0 and mat[src][j] == 1:
    			DFS(mat, j)
    	return visite
    Exemple :
    >>> DFS([[0, 0, 1, 1, 0], [1, 0, 0, 0, 0], [0, 1, 0, 1, 0], [0, 1, 1, 0, 0], [1, 0, 1, 0, 0]],0)
    [0, 2, 1, 3]

    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Que veut dire DFS dans "algorithme de DFS"? Deep First Search? autre chose.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Rep
    Merci de ta réponse oui c'est exactement cet algorithme pour parcourir un graph dans un ordre et retourner l'ordre.
    Merci d'avance de ton aide.

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par nono9196 Voir le message
    c'est exactement cet algorithme pour parcourir un graph dans un ordre et retourner l'ordre.
    Avec un peu de recherche sur Internet, vous avez déjà des codes tout faits.
    Mais si vous voulez réfléchir au code que vous avez écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def DFS(mat,src):
    	visite = []
    	visite.append(src)
    	for j in range(0, len(mat)):
    		if visite[j]==0 and mat[src][j] == 1:
    			DFS(mat, j)
    	return visite
    La liste visite est initialisé à vide à chaque appel de DFS: impossible de savoir par où on est déjà passé. La solution est d'utiliser une variable globale ou de la passer en argument. Cela fait, çà va péter à cause de visite[j]==0 mais çà devrait être facile à corriger en réfléchissant un peu au message d'erreur (un IndexError je suppose).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Ok merci je vais faire cela et donner des nouvelles ensuite

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut
    Après de multiples essais, je n'arrive pas à me débarasser de mon erreur Indexerror car je ne vois pas ce que je pourrais mettre à la place du J'ai essayer cela :
    Code : 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
    visite = []
     
    def DFS(mat,src):
    	"""
            Retourne la liste des sommets rencontrés lors
            d'un parcours en profondeur issu du sommet <src>.
     
            Arguments:
            mat -- matrice d'adjacence du graphe
            src -- un sommet du graphe, départ du parcours
     
            >>> DFS([[0, 0, 1, 1, 0], [1, 0, 0, 0, 0], [0, 1, 0, 1, 0], [0, 1, 1, 0, 0], [1, 0, 1, 0, 0]],0)
            {0, 2, 1, 3}
            """
    	### TODO : EXO 2 QUESTION 1 ###
    	global visite
    	visite.append(src)
    	test = True
    	for j in range(0, len(visite)):
    		if visite[j]==src and mat[src][j] == 1:
    			DFS(mat, j)
    	return visite
    Mais je ne rentre pas dans ma boucle.
    Merci de votre réponse.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par nono9196 Voir le message
    Après de multiples essais, je n'arrive pas à me débarasser de mon erreur Indexerror car je ne vois pas ce que je pourrais mettre à la place du J'ai essayer cela : [CODE]visite = []
    Ca sert à rien d'essayer n'importe quoi en espérant que çà va le faire, il faut d'abord faire fonctionner son cerveau. Dans la boucle, vous parcourez la liste des nœuds pour savoir ceux qui sont adjacents au nœud courant. Donc çà ne peut pas être autre chose que for j in range(0, len(mat)):.
    Après à quelles conditions "entrer" dans la récursion? Si le nœud j n'a pas été visité et qu'il existe un chemin entre j et src.
    Et la condition "j a été visité" se traduit par "j est dans la liste visite".

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2017
    Messages : 24
    Points : 12
    Points
    12
    Par défaut Merci
    J'ai fait cela pour corriger le problème grâce à vous cela marche.
    Que pensez-vous de cette solution :
    Code : 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
    visite = []
    test = set()
    def DFS(mat,src):
    	"""
            Retourne la liste des sommets rencontrés lors
            d'un parcours en profondeur issu du sommet <src>.
     
            Arguments:
            mat -- matrice d'adjacence du graphe
            src -- un sommet du graphe, départ du parcours
     
            """
    	visite.append(src)
    	test.add(src)
    	for j in range(0, len(mat)):
    		if j not in test and mat[src][j] == 1:
    			DFS(mat, j)
    	return visite
     
    assert DFS([[0, 0, 1, 1, 0], [1, 0, 0, 0, 0], [0, 1, 0, 1, 0], [0, 1, 1, 0, 0], [1, 0, 1, 0, 0]],0) == [0, 2, 1, 3]
    Merci encore pour votre aide.

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

Discussions similaires

  1. Problème de parcours des champs dans l'ordre.
    Par jyms2006 dans le forum Access
    Réponses: 1
    Dernier message: 19/04/2006, 11h08
  2. Problème algo de parcour de graphe
    Par goblin dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2005, 15h04
  3. [JSTL] Problème de parcours d'arbre en XML
    Par slashmax dans le forum Taglibs
    Réponses: 1
    Dernier message: 04/12/2005, 17h13
  4. Algorithme de parcour de graphe :(
    Par scaleo dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 03/10/2005, 10h36
  5. [Turbo Pascal] [Windows XP] Problème avec l'unité GRAPH
    Par themofleur dans le forum Turbo Pascal
    Réponses: 22
    Dernier message: 29/03/2003, 22h43

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