示例#1
0
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);
	}
}