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); }
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); }