public boolean forwardCheck() { boolean result = true; if (!stackMachineChecked) { stackMachine = new StackMachine(); stackMachine.setProblem(this); stackMachine.setValueNames(getValueNames()); stackMachineChecked = true; } for (int i = lastSetValue + 1; i < values.size(); i++) { Value valueToCheck = values.get(i); int limitsSize = valueToCheck.getLimits().getLimits().size(); for (int j = 0; j < limitsSize; j++) { valueToCheck.setLimit(j); if (!stackMachine.checkLimits(cspLimits)) { valueToCheck.blockLimit(j); } } if (!valueToCheck.hasFreeLimits()) { valueToCheck.clearValue(); return false; } valueToCheck.clearWithoutLimits(); } return result; }
public boolean goOneLevelUp() { boolean result = true; if (lastSetValue > 0) { Value value = values.get(lastSetValue); value.clearValue(); --lastSetValue; } else { result = false; } // System.out.println("goOneLevelUp " + result); return result; }
public void resetValues() { lastSetValue = 0; for (Value value : values) { value.clearValue(); } }