void GenerateParentheses::search(int l) { if (l == N) { string ans; for (auto f : field) ans.push_back((f == 1) ? '(' : ')'); ret.push_back(ans); return; } field[l] = 1; nlbs++; if (isValidCandidate()) search(l + 1); nlbs--; field[l] = -1; nrbs++; if (isValidCandidate()) search(l + 1); nrbs--; }
void AdditionBasedElementComposer<T>::evaluateCombination(const std::vector<T>& partialElements, T target, DistanceCalculatorPtr<T> pDistanceCalculator, mreal_t epsilon, std::vector<LookupResult<T> >& resultBuffer) { T candidate; composeCandidate(partialElements, candidate); m_combinationCounter++; if(!isValidCandidate(candidate)) { return; } mreal_t distanceToTarget = 0.0; if(pDistanceCalculator == NullPtr || (distanceToTarget = pDistanceCalculator->distance(candidate, target)) <= epsilon) { resultBuffer.push_back(LookupResult<T>(candidate, distanceToTarget)); if(m_maxResultsNumber > 0 && resultBuffer.size() >= m_maxResultsNumber) { throw (1); } } else { releaseIntermediateResult(candidate); } }