Пример #1
0
        public void DirectedSparseGraph()
        {
            var testCase = new TestCase();

            testCase
            .AddVertex("n1")
            .AddVertex("n2")
            .AddVertex("n3")
            .AddVertex("n4")
            .AddVertex("n5")
            .AddVertex("n6");

            testCase
            .AddDirectedEdge("n1", "n2", 10)
            .AddDirectedEdge("n2", "n3", 8)
            .AddDirectedEdge("n3", "n4", 11)
            .AddDirectedEdge("n4", "n5", 6)
            .AddDirectedEdge("n5", "n6", 9)
            .AddDirectedEdge("n1", "n6", 3)
            .AddDirectedEdge("n2", "n6", 5)
            .AddDirectedEdge("n3", "n6", 18)
            .AddDirectedEdge("n3", "n5", 21)
            .AddDirectedEdge("n6", "n1", 1);

            var tsp = new TSP <string, EquatableEdge <string>, BidirectionalGraph <string, EquatableEdge <string> > >(
                testCase.Graph, testCase.GetWeightsFunc());

            tsp.Compute();

            Assert.AreEqual(45, tsp.BestCost);
            Assert.IsNotNull(tsp.ResultPath);
            Assert.IsFalse(tsp.ResultPath.IsDirectedAcyclicGraph());
        }
Пример #2
0
        public void DirectedSparseGraphWithoutPath()
        {
            var testCase = new TestCase();

            testCase
            .AddVertex("n1")
            .AddVertex("n2")
            .AddVertex("n3")
            .AddVertex("n4")
            .AddVertex("n5")
            .AddVertex("n6");

            testCase
            .AddDirectedEdge("n1", "n2", 10)
            .AddDirectedEdge("n2", "n3", 8)
            .AddDirectedEdge("n3", "n4", 11)
            .AddDirectedEdge("n4", "n5", 6)
            .AddDirectedEdge("n5", "n6", 9)
            .AddDirectedEdge("n1", "n6", 3)
            .AddDirectedEdge("n2", "n6", 5)
            .AddDirectedEdge("n3", "n6", 18)
            .AddDirectedEdge("n3", "n5", 21);

            var tsp = new TSP <string, EquatableEdge <string>, BidirectionalGraph <string, EquatableEdge <string> > >(
                testCase.Graph, testCase.GetWeightsFunc());

            tsp.Compute();

            Assert.AreEqual(tsp.BestCost, double.PositiveInfinity);
            Assert.IsNull(tsp.ResultPath);
        }