Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ENUMÉRATION DE TOUS LES CHEMINS D'UN GRAPHE


Information sur la source

Catégorie :Maths Classé sous : chemins, graphe Niveau : Initié Date de création : 13/03/2006 Vu : 4 219

Note :
Aucune note

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

C'est un algorithme récursif qui parcourt le graphe en profondeur et affiche les chemins au fur et à mesure qu'il les trouve. La matrice d'adjacence est définie par adj(i,j).
J'ai pris un exemple d'un graphe à 7 noeuds et ai utilisé des Collections (listes) pour stocker les noeuds et les successeurs d'un noeud.
 

Source

  • Function roadmap(ByVal chem As String, ByVal ext As Variant, destination As String)
  • Dim successeurs As New Collection 'Contient les successeurs d'un noeud du graphe
  • Dim noeuds As New Collection 'contient tous les noeuds du graphe
  • Dim k, nod, s, tc As Variant
  • Dim adj(10, 10) As Variant
  • For k = 1 To 7 'remplir les noeuds
  • noeuds.Add Item:=k
  • Next k
  • 'matrice des adjacents : si est adjacent à j alors adj(i,j)=1
  • adj(1, 2) = 1
  • adj(2, 1) = 1
  • adj(1, 7) = 1
  • adj(7, 1) = 1
  • adj(2, 4) = 1
  • adj(4, 2) = 1
  • adj(2, 3) = 1
  • adj(3, 2) = 1
  • adj(2, 6) = 1
  • adj(6, 2) = 1
  • adj(3, 4) = 1
  • adj(4, 3) = 1
  • adj(4, 5) = 1
  • adj(5, 4) = 1
  • adj(5, 6) = 1
  • adj(6, 5) = 1
  • adj(6, 7) = 1
  • adj(7, 6) = 1
  • For Each k In noeuds 'calcul des successeurs d'un noeud
  • If adj(ext, k) = 1 Then
  • successeurs.Add Item:=k
  • End If
  • Next k
  • If ext = destination Then 'Si on arrive à destination alors on écrit la solution Debug.Print chem
  • Else
  • For Each nod In successeurs
  • If InStr(1, chem, nod, vbTextCompare) = 0 Then
  • s = chem
  • s = s & nod
  • Call roadmap(s, nod, destination)
  • End If
  • Next nod
  • End If
  • End Function
Function roadmap(ByVal chem As String, ByVal ext As Variant, destination As String)

Dim successeurs As New Collection 'Contient les successeurs d'un noeud du graphe
Dim noeuds As New Collection      'contient tous les noeuds du graphe
Dim k, nod, s, tc As Variant
Dim adj(10, 10) As Variant

For k = 1 To 7 'remplir les noeuds
    noeuds.Add Item:=k
Next k

'matrice des adjacents : si est adjacent à j alors adj(i,j)=1
adj(1, 2) = 1
adj(2, 1) = 1
adj(1, 7) = 1
adj(7, 1) = 1
adj(2, 4) = 1
adj(4, 2) = 1
adj(2, 3) = 1
adj(3, 2) = 1
adj(2, 6) = 1
adj(6, 2) = 1
adj(3, 4) = 1
adj(4, 3) = 1
adj(4, 5) = 1
adj(5, 4) = 1
adj(5, 6) = 1
adj(6, 5) = 1
adj(6, 7) = 1
adj(7, 6) = 1

For Each k In noeuds 'calcul des successeurs d'un noeud
    If adj(ext, k) = 1 Then
        successeurs.Add Item:=k
    End If
Next k
If ext = destination Then 'Si on arrive à destination alors on écrit la solution         Debug.Print chem
Else
    For Each nod In successeurs
        If InStr(1, chem, nod, vbTextCompare) = 0 Then
            s = chem
            s = s & nod
            Call roadmap(s, nod, destination)
        End If
    Next nod
End If

End Function

Conclusion

Ce programme n'est pas adapté pour des graphes de grande taille et fortement connexe (trop de chemins par rapport aux noeuds)
 

Commentaires et avis

signaler à un administrateur
Commentaire de amezghal le 13/03/2006 15:00:17

il reste du niveau 1

signaler à un administrateur
Commentaire de DARKSIDIOUS le 13/03/2006 21:47:06 administrateur CS

Initié ???

DarK Sidious

signaler à un administrateur
Commentaire de amezghal le 17/03/2006 11:02:40

pourquoi ????

signaler à un administrateur
Commentaire de osta le 19/03/2006 21:13:49

J'en ai ajouté le même mais en C.

signaler à un administrateur
Commentaire de ld40 le 12/09/2006 22:20:35

c est pas mal parce que c'est simplement expliqué.
reste à améliorer l'algo pour par exemple trouver le chemin le plus court. ;-)

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Chemins dans un graphe [ par osta ] Bonjour à toutes et à tous,Je cherche un programme qui liste tous les chemins entre deux sommets d'un graphe.Merci d'avance Recherche exhaustive de de chemins dans un graphe [ par osta ] bonjour à toutes et à tous,Je vous prie de me donner un programme ou un algorithme qui énumère tous les chemins entre deux donnés dans un grapheMerci Matrice d'adjacence et parcours d'un graphe en VBA [ par Troy34 ] Bonjour à tous,Je suis actuellement en train de travailler avec le langage VBA (avec Access). Je dois créer une application qui permet de retrouver to Définition des chemins d'accès dans le code suite à installation [ par Eric5181 ] Bonjour,Etant actuellement en train de développer une application, je me retrouve devant un problème.Je fais référence à des fichiers de données exter Graphe de courbes [ par Cham ] Bonjour,Impossible de trouver ce renseignement: je cherche la façon de créer un graphe fait de courbes, et non de camembert. Merci d'avance pour votre Fichier ini [ par Tarkhun ] Salut à tous,Voici mon probléme:dans code j'utilise des fichiers ini pour stocker les chemins d'accés aux bases de données et aux fichiers wordPour ce AIDE VB ACCESS POUR UN GRAPHE [ par nope ] j'ai un graphe qui se crée sous ACCESS 97 et lorsque ce graphe est tracé j'ai besoin de tracer un ligne verticale pour pouvoir voir le valuers. j'util AIDE VB ACCESS POUR UN GRAPHE [ par nope ] j'ai un graphe qui se crée sous ACCESS 97 et lorsque ce graphe est tracé j'ai besoin de tracer un ligne verticale pour pouvoir voir le valuers. j'util AIDE POUR UN GRAPHE [ par nope ] j'ai un graphe qui se crée sous ACCESS 97 et lorsque ce graphe est tracé j'ai besoin de tracer un ligne verticale pour pouvoir voir le valuers. j'util BESOIN D'AIDE POUR UN GRAPHE URGENT!!! [ par nope ] j'ai un graphe qui se crée sous ACCESS 97 et lorsque ce graphe est tracé j'ai besoin de tracer un ligne verticale pour pouvoir voir le valuers. j'util


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,312 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.