2013-08-27 25 views
6

İşte benim sorunumun bir örneğidir.QuickGraph Kitaplığı'nda Ağırlıklandırılmış Yönlendirilmiş Grafik

enter image description here

Ben yapıyı sorgulamaya ve bu gibi bilgileri bulabilirsiniz böylece şekilde C# bu kodu istiyorum:

  • Toplam mesafe AB için .
  • En kısa mesafe A (eğer okunun yönünde karşı çıkamaz göz önünde tutarak) Eiçin.

Yani benim grafiği Model oluşturmak üzere bitişiklik Listesini kullanmak düşündüm, ama sonra bu ortak bir şeydir düşünce ve süreci (tekerleği yeniden icat etmek gerek hızlandırmak yardımcı olmak için kütüphaneler aramaya başladı. vb.)

Çeşitli konularda birkaç kez tavsiye edilen this Library'a rastladım, ancak yukarıda benim çizilen grafiğimi gerçek modelleme buluyorum.

cevap

7

Grafiğinizi bir AdjacencyGraph<string, Edge<string>> olarak modellemek ve bir Dictionary<Edge<string>, double> maliyet sözlüğü oluşturmak için olası bir çözüm, maliyetlerin mesafenizdir. Sizin _graph

// ... 
private AdjacencyGraph<string, Edge<string>> _graph; 
private Dictionary<Edge<string>, double> _costs; 

public void SetUpEdgesAndCosts() 
{ 
    _graph = new AdjacencyGraph<string, Edge<string>>(); 
    _costs = new Dictionary<Edge<string>, double>(); 

    AddEdgeWithCosts("A", "D", 4.0); 
    // snip 
    AddEdgeWithCosts("C", "B", 1.0); 
} 

private void AddEdgeWithCosts(string source, string target, double cost) 
{ 
    var edge = new Edge<string>(source, target); 
    _graph.AddVerticesAndEdge(edge); 
    _costs.Add(edge, cost); 
} 

artık şudur:

your graph

Sonra kullanarak A'dan E'ye kadar kısa yolu bulabilirsiniz:

private void PrintShortestPath(string @from, string to) 
{ 
    var edgeCost = AlgorithmExtensions.GetIndexer(_costs); 
    var tryGetPath = _graph.ShortestPathsDijkstra(edgeCost, @from); 

    IEnumerable<Edge<string>> path; 
    if (tryGetPath(to, out path)) 
    { 
     PrintPath(@from, to, path); 
    } 
    else 
    { 
     Console.WriteLine("No path found from {0} to {1}."); 
    } 
} 

Bu QuickGraph wiki den uyarlanmıştır. Bu yazdırır: [Github] Çalışma örneği

Path found from A to E: A > D > B > E 
+0

(https://github.com/serra/QuickgraphExamples/blob/master/src/examples/CalculateDistance.cs) – Marijn

İlgili konular