public static void GetShortestHamiltonianCycleTest(int testNumber)
        {
            var matrix = AdjacencyMatrix.GetGraph(testNumber);
            var path   = new BranchAndBound(matrix.Weights).GetShortestHamiltonianCycle();

            Assert.True(path.AreUnique(1, path.Length - 1), string.Join(", ", path));

            var actualDistance   = AdjacencyMatrix.PathDistance(path, matrix.Weights);
            var expectedDistance = matrix.ShortestPathDistance;

            Assert.Equal(expectedDistance, actualDistance);
        }
Beispiel #2
0
        public void GetHamiltonianCyclesTest(int testNumber)
        {
            var matrix        = AdjacencyMatrix.GetGraph(testNumber);
            var actualPaths   = new LatinComposition(matrix.Weights).GetAllHamiltorianCycles();
            var expectedPaths = matrix.AllPaths;

            // due to there can be not only one shortest path,
            // we compare distance between actual and expected shortest paths
            int[] actualShortestPath = GraphUtil.ShortestRoute(matrix.Weights, actualPaths);
            var   actualDistance     = AdjacencyMatrix.PathDistance(actualShortestPath, matrix.Weights);
            var   expectedDistance   = matrix.ShortestPathDistance;

            Assert.True(expectedPaths.InnerSequencesEqualInSomeOrder(actualPaths));
            Assert.Equal(expectedDistance, actualDistance);
        }