public ApproximateProblemSolver(SubtaskInput problemInput, IProblemResultsComparator resultsComparator) { _problemInput = problemInput; _resultsComparator = resultsComparator; var verticesDegreesInG = problemInput.G.GetVertices().Select(v => problemInput.G.GetVertexDegree(v)) .ToArray(); var verticesDegreesInH = problemInput.H.GetVertices().Select(v => problemInput.H.GetVertexDegree(v)) .ToArray(); _vertexComparerInG = new DescendingVerticesDegreeComparer <int>(verticesDegreesInG); _vertexComparerInH = new DescendingVerticesDegreeComparer <int>(verticesDegreesInH); }
public ExactProblemSolverRecursive( SubtaskInput problemInput, int initialV, int initialU, ProblemResult bestProblemResult, IProblemResultsComparator resultsComparator ) { _problemInput = problemInput; _resultsComparator = resultsComparator; BestProblemResult = bestProblemResult; var n = _problemInput.G.VerticesCount; var m = _problemInput.H.VerticesCount; _currentProblemResult = new ProblemResult { CV = new List <int>(n), CU = new List <int>(m), SubgraphEdges = 0 }; _neighborsV = new List <int>(n) { initialV }; _neighborsU = new List <int>(m) { initialU }; _closedV = new bool[n]; _closedV[initialV] = true; _closedU = new bool[m]; _closedU[initialU] = true; }
public GreedyProblemSolver( SubtaskInput problemInput, int initialV, int initialU, ProblemResult bestProblemResult, IProblemResultsComparator resultsComparator, IComparer <int> vertexComparerInG, IComparer <int> vertexComparerInH ) { _problemInput = problemInput; _resultsComparator = resultsComparator; BestProblemResult = bestProblemResult; var n = _problemInput.G.VerticesCount; var m = _problemInput.H.VerticesCount; _currentProblemResult = new ProblemResult { CV = new List <int>(n), CU = new List <int>(m), SubgraphEdges = 0 }; _neighborsV = new SortedSet <int>(vertexComparerInG); _neighborsU = new SortedSet <int>(vertexComparerInH); _neighborsV.Add(initialV); _neighborsU.Add(initialU); _closedV = new bool[n]; _closedV[initialV] = true; _closedU = new bool[m]; _closedU[initialU] = true; }
public IProblemSolver Create(SubtaskInput problemInput, IProblemResultsComparator resultsComparator) { return(new ApproximateProblemSolver(problemInput, resultsComparator)); }
public IProblemSolver Create(SubtaskInput problemInput, IProblemResultsComparator resultsComparator) { return new ExactProblemSolver(problemInput, resultsComparator); }
public ExactProblemSolver(SubtaskInput problemInput, IProblemResultsComparator resultsComparator) { _problemInput = problemInput; _resultsComparator = resultsComparator; }