コード例 #1
0
        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);
        }
コード例 #2
0
            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;
            }
コード例 #3
0
            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;
            }
コード例 #4
0
 public IProblemSolver Create(SubtaskInput problemInput, IProblemResultsComparator resultsComparator)
 {
     return(new ApproximateProblemSolver(problemInput, resultsComparator));
 }
コード例 #5
0
 public IProblemSolver Create(SubtaskInput problemInput, IProblemResultsComparator resultsComparator)
 {
     return new ExactProblemSolver(problemInput, resultsComparator);
 }
コード例 #6
0
 public ExactProblemSolver(SubtaskInput problemInput, IProblemResultsComparator resultsComparator)
 {
     _problemInput      = problemInput;
     _resultsComparator = resultsComparator;
 }