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 :

Recherche d'un cycle dans un graphe par récurrence


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 6
    Points
    6
    Par défaut Recherche d'un cycle dans un graphe par récurrence
    Bonjour,
    je n'arrive pas à créer un algorithme permettant de résoudre mon problème. J'ai pensé à une fonction récursive mais je n'y arrive pas. Voici mon problème :
    Je possède un fichier (environ 100000 lignes) de la forme suivante
    1 : 2
    1 : 3
    1 : 4
    2 : 6
    2 : 7
    4 : 6
    4 : 7
    6 : 1
    6 : 7
    7 : 2
    8 : 1

    Ce fichier peut aussi être écrit comme cela :
    1 : (2,3,4)
    2 : (6,7)
    4 : (6,7)
    6 : (1,8)
    7 : (2)
    8 : (1)

    Ce que je veux faire, c'est trouver tous les cycles possibles. Par exemple :
    1 -> 2 -> 6 -> 1
    1 -> 4 -> 6 -> 1
    2 -> 7 -> 2
    6 -> 8 ->1 -> 2 -> 6.
    Les chemins suivants sont à ignorer :
    1 -> 3 qui n'existe pas : on s’arrête.
    Si un chemin ne donne pas de cycle il doit être ignoré.

    Pour chaque valeur, j'ai une liste de 0 à 10 éléments.
    Si quelqu'un peut me donner une idée...
    Merci

  2. #2
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 886
    Points : 1 526
    Points
    1 526
    Par défaut
    Pour commencer, je suppose que la deuxième ligne 6 est "6 : 8", vu les cycles que tu donnes ensuite.

    En fait, ton problème est une recherche de cycles dans un graphe orienté, chaque ligne correspondant à un arc dans ton graphe.

    Il y a une discussion là dessus ici : http://www.developpez.net/forums/d10...cles-d-graphe/

    Et tu as des algorithmes ici : http://en.wikipedia.org/wiki/Cycle_detection

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2005
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par 10_GOTO_10 Voir le message
    Et tu as des algorithmes ici : http://en.wikipedia.org/wiki/Cycle_detection
    Merci, je viens de regarder cette page mais est-ce qu'elle s'applique à mon cas ? Moi je n'ai pas forcément une 'fonction'.
    En effet, le 1 par exemple peut donner 2, 3 ou 4. C'est ça que je n'arrive pas à écrire récursivement.
    Olivier

  4. #4
    Membre actif

    Homme Profil pro
    autodidacte
    Inscrit en
    Mars 2011
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : autodidacte

    Informations forums :
    Inscription : Mars 2011
    Messages : 95
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par olivier_1970 Voir le message
    Merci, je viens de regarder cette page mais est-ce qu'elle s'applique à mon cas ? Moi je n'ai pas forcément une 'fonction'.
    En effet, le 1 par exemple peut donner 2, 3 ou 4. C'est ça que je n'arrive pas à écrire récursivement.
    Olivier
    Pour pouvoir t'aider précisément, nous avons besoin d'en connaitre plus sur ta méthode actuelle.
    Utilises-tu une matrice d'adjacences ? Un tableau global avec les valeurs envisagées successives ?
    Tes données sont de grande taille, n'emploie pas un tableau local à la récursion pour éviter un dépassement de mémoire.

    Sinon, la fonction de récursion devrait fort ressembler à cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    MaFonction (premierElementDeLaPile,tableauDAdjacences)
    si l'élément est égal au premier élément de la pile globale,
        {imprimer la liste}
     
    sinon
    {
        générer les éléments adjacents à l'élément courant de la pile (tous les j | T[élémentCourant][j]==1]
        {
            ajouter l'élément généré à la pile
            appel de MaFonction(premierElementDeLaPile,tableauDAdjacences)
            dépiler l'élément courant de la pile
        }
    }
    Bon courage!
    Toujours à adapter le problème à la structure de la machine, mais se soigne pour faire l'inverse.

Discussions similaires

  1. Élimination des cycles dans un graphe
    Par katicr2 dans le forum MATLAB
    Réponses: 0
    Dernier message: 10/02/2012, 20h19
  2. cycle dans un graphe --Boost graph
    Par nina2007 dans le forum Boost
    Réponses: 0
    Dernier message: 11/11/2009, 10h41
  3. plus petit cycle dans un graphe
    Par nina2007 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 07/08/2009, 14h41
  4. Réponses: 5
    Dernier message: 12/01/2007, 10h57
  5. Recherche de fichiers dans un repertoire par multicritères
    Par frederic.go dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 11/09/2006, 21h57

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