Bonjour,

je commence à l'utilisation de la library QuickGraph pour l'implémentation des algorithmes de la théorie des graphes sur mon réseau que j'ai sous la forme d'un fichier en format GraphML,
jusqu'à maintenait j'ai pu utiliser quelques algorithmes comme celui de Dijkstra, mais cela en fixant la source du graphe et ca me donne après les plus cours chemins des nœuds lié à la source.

Le problème que j'ai mnt, c'est comment je peux fixer le nœud de destination sur mon programme et aussi comment je peux prendre en considération le cout (que j'ai définie sur le fichier GraphML)de chaque vecteur ?

Voici une partie de 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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 
            //lecture du fichier GRAPHML
            var g = new BidirectionalGraph<int, Edge<int>>();
            using (var xreader = XmlReader.Create(@"C:\GraphML\test2.graphml"))
                g.DeserializeFromGraphML(xreader,
                    id => int.Parse(id),
                    (source, target, id) => new Edge<int>(source, target)
                );
 
 
            int root = 68; // Le numéro du noeud source definie dans le fichier GraphML
 
            Func<Edge<int>, double> edgeCost1 = b => 1; // Le cout definie comme constante
 
            var predecessors = new VertexPredecessorRecorderObserver<int, Edge<int>>();
 
 
            // utilisation de Dijkstra sur le graphe
            DijkstraShortestPathAlgorithm<int, Edge<int>> dijkstra1 = new DijkstraShortestPathAlgorithm<int, Edge<int>>(g, edgeCost1);
 
            //joindre un observateur de distance qui nous donne les distances du plus court chemin
            VertexDistanceRecorderObserver<int, Edge<int>> distObserver1 = new VertexDistanceRecorderObserver<int, Edge<int>>(edgeCost1);
            distObserver1.Attach(dijkstra1);
 
            //joindre un "VertexPredecessorRecorderObserver" qui fournis les chemins
            VertexPredecessorRecorderObserver<int, Edge<int>> predecessorObserver1 = new VertexPredecessorRecorderObserver<int, Edge<int>>();
            predecessorObserver1.Attach(dijkstra1);
 
            // On execute l'algorithme, on specifie le noeud source
            dijkstra1.Compute(root);
 
            foreach (KeyValuePair<int, double> kvp in distObserver1.Distances)
                 Console.WriteLine("Distance de la source jusqu'à le noeud {0} est {1}", kvp.Key, kvp.Value);
             foreach (KeyValuePair<int, Edge<int>> kvp in predecessorObserver1.VertexPredecessors)
                 Console.WriteLine("Pour aller au noeud {0} il faut passer par le vecteur {1}", kvp.Key, kvp.Value);

Merci.