public void Compute() { var distances = new Dictionary <Edge <char>, double>(); var g = CreateGraph(distances); var fw = new FloydWarshallAllShortestPathAlgorithm <char, Edge <char> >(g, e => distances[e]); fw.Compute(); fw.Dump(Console.Out); foreach (var i in g.Vertices) { foreach (var j in g.Vertices) { Console.Write("{0} -> {1}:", i, j); IEnumerable <Edge <char> > path; if (fw.TryGetPath(i, j, out path)) { double cost = 0; foreach (var edge in path) { Console.Write("{0}, ", edge.Source); cost += distances[edge]; } Console.Write("{0} --- {1}", j, cost); } Console.WriteLine(); } } { double distance; Assert.IsTrue(fw.TryGetDistance('A', 'A', out distance)); Assert.AreEqual(0, distance); Assert.IsTrue(fw.TryGetDistance('A', 'B', out distance)); Assert.AreEqual(6, distance); Assert.IsTrue(fw.TryGetDistance('A', 'C', out distance)); Assert.AreEqual(1, distance); Assert.IsTrue(fw.TryGetDistance('A', 'D', out distance)); Assert.AreEqual(4, distance); Assert.IsTrue(fw.TryGetDistance('A', 'E', out distance)); Assert.AreEqual(5, distance); } }