Example #1
0
// Hidden pairs, triples, quads... v2
bool Solver::HiddenSets() {

	for (int set = 0; set < MAX*3; set++) {
			
		Set numberSets[MAX];

		for (int number = 1; number <= MAX; number++) {
			numberSets[number-1] = sets[set].GetPossibilitiesFor(number);
		}

		for (unsigned int i = 0; i < numberCombos.size(); i++) {
				
			int multipleCount = numberCombos[i].size();
			Set** hiddenMultiples = new Set*[multipleCount-1];
					
			Set squaresMet;
			bool numberMatches[MAX];

			for (int k = 0; k < MAX; k++)
				numberMatches[k] = false;

			numberMatches[numberCombos[i][0]] = true;

			for (int j = 1; j < multipleCount; j++) {
				hiddenMultiples[j-1] = &numberSets[numberCombos[i][j]];
				numberMatches[numberCombos[i][j]] = true;
			}
					
			if ( numberSets[numberCombos[i][0]].HiddenMultiples( hiddenMultiples, multipleCount-1, &squaresMet ) ) {					
				update = squaresMet.BlockAllExcluding(numberMatches) || update;
			}
			delete [] hiddenMultiples;
		}
	}
	//if (update)
	//	MessageBox("hidden multiples",NULL,MB_OK);

	return update;
}