Пример #1
0
        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);
            }
        }