Modified:
trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Matrix.java
trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Solution.java
Log:
attempting to iterate over all the solutions sums for a row
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
Mon Mar 3 07:26:41 2008
@@ -271,7 +271,9 @@
Solution currentSolution) {
Set<Solution> returnSolutions = new TreeSet<Solution>();
- returnSolutions.add(currentSolution);
+ if(currentSolution.minSum>=0) {
+ returnSolutions.add(currentSolution);
+ }
// We're at a leaf solution so return it
if(end == 0) {
@@ -283,9 +285,22 @@
}
// We found a lower minimum sum so set it
currentSolution.minSum = newMinSum;
- }
- returnSolutions.clear();
- returnSolutions.add(currentSolution);
+ returnSolutions.clear();
+ returnSolutions.add(currentSolution);
+ } else {
+ newMinSum = currentSolution.minSum+Math.abs(selectedRow[end]);
+ if(newMinSum>=0) {
+ //We need to make it positive if the number is negative
+ 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 {
@@ -296,19 +311,28 @@
int newMinSum;
if(j==0) {
newMinSum = origMinSum;
+ if(selectedRow[end]>0) {
+ currentSolution.flipBitVector.set(end);
+ }
}
- else { //Flip the sign and return to original
- currentSolution.flipBitVector.set(end);
- newMinSum = origMinSum + -2*currentSolution.minSum;
+ else {
+ newMinSum = currentSolution.minSum+Math.abs(selectedRow[end]);
+ if(selectedRow[end]<0) {
+ currentSolution.flipBitVector.set(end);
+ }
}
currentSolution.minSum = newMinSum;
-
+ /**
+ if(currentSolution.minSum <
returnSolutions.iterator().next().minSum ) {
+ //returnSolutions.clear();
+ returnSolutions.add(currentSolution);
+ }**/
Set<Solution> solutions =
findRowMinSumSolutionsRecursive(selectedRow, end-1, (Solution)currentSolution.clone());
- if(solutions.size() == 0 ||
solutions.iterator().next().minSum==returnSolutions.iterator().next().minSum) {
+ if(solutions.size() != 0 && (returnSolutions.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 ) {
+ else if(solutions.size() != 0 && (returnSolutions.size()==0 ||
solutions.iterator().next().minSum <
returnSolutions.iterator().next().minSum) ) {
returnSolutions.clear();
returnSolutions.addAll(solutions);
}
Modified: trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Solution.java
==============================================================================
---
trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Solution.java (original)
+++
trunk/Facebook_puzzles/src/net/ddaniels/facebook/puzzles/Solution.java
Mon Mar 3 07:26:41 2008
@@ -44,4 +44,15 @@
}
return -1;
}
+
+ public String toString() {
+ String s = "{";
+ for(int i=0; i<flipBitVector.length(); i++) {
+ s+= flipBitVector.get(i)==true?"1":"0";
+
+ }
+ s+= "} [" + minSum+ "]";
+ return s;
+
+ }
}