Modified:
trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Matrix.java
Log:
attempted to iterate over all solutions
Modified: trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Matrix.java
==============================================================================
---
trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Matrix.java (original)
+++
trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Matrix.java
Sun Mar 2 12:57:26 2008
@@ -272,32 +272,47 @@
Set<Solution> returnSolutions = new TreeSet<Solution>();
returnSolutions.add(currentSolution);
- int newMinSum = currentSolution.minSum-Math.abs(selectedRow[end]);
- if(newMinSum>=0) {
- //We need to make it negative if the number is positive
- if(selectedRow[end]>0) {
- currentSolution.flipBitVector.set(end);
- }
- // We found a lower minimum sum so set it
- currentSolution.minSum = newMinSum;
- }
+
// We're at a leaf solution so return it
if(end == 0) {
+ int newMinSum = currentSolution.minSum-Math.abs(selectedRow[end]);
+ if(newMinSum>=0) {
+ //We need to make it negative if the number is positive
+ if(selectedRow[end]>0) {
+ currentSolution.flipBitVector.set(end);
+ }
+ // We found a lower minimum sum so set it
+ currentSolution.minSum = newMinSum;
+ }
returnSolutions.clear();
returnSolutions.add(currentSolution);
} else {
- end--;
- for(int i=end; i>=0; i--) {
- Set<Solution> solutions =
findRowMinSumSolutionsRecursive(selectedRow, end, (Solution)currentSolution.clone());
- if(solutions.size() == 0 ||
solutions.iterator().next().minSum==returnSolutions.iterator().next().minSum) {
- returnSolutions.addAll(solutions);
- }
- //If we found solutions with a lower min sum then clear out the
existing solutions
- else if(solutions.iterator().next().minSum <
returnSolutions.iterator().next().minSum ) {
- returnSolutions.clear();
- returnSolutions.addAll(solutions);
- }
+
+ int origMinSum = currentSolution.minSum-Math.abs(selectedRow[end]);
+ for(int j=0; j<2; j++) {
+
+ for(int i=end; i>=0; i--) {
+ int newMinSum;
+ if(j==0) {
+ newMinSum = origMinSum;
+ }
+ else { //Flip the sign and return to original
+ currentSolution.flipBitVector.set(end);
+ newMinSum = origMinSum + -2*currentSolution.minSum;
+ }
+ currentSolution.minSum = newMinSum;
+
+ Set<Solution> solutions =
findRowMinSumSolutionsRecursive(selectedRow, end-1, (Solution)currentSolution.clone());
+ if(solutions.size() == 0 ||
solutions.iterator().next().minSum==returnSolutions.iterator().next().minSum) {
+ returnSolutions.addAll(solutions);
+ }
+ //If we found solutions with a lower min sum then clear out
the existing solutions
+ else if(solutions.iterator().next().minSum <
returnSolutions.iterator().next().minSum ) {
+ returnSolutions.clear();
+ returnSolutions.addAll(solutions);
+ }
+ }
}
}
return returnSolutions;