public void recoverSolution(int i, int k) { int j; if (guard-- < 0) { // System.out.println("Can't recover" + i + "," + k); return; } if (k - i <= 1) return; PairDeque pair = subD.pairs(i, k); if (reflex(i)) { j = pair.bB(); recoverSolution(j, k); if (j - i > 1) { if (pair.aB() != pair.bB()) { PairDeque pd = subD.pairs(i, j); pd.restore(); while ((!pd.emptyB()) && pair.aB() != pd.aB()) pd.popB(); // assert(!pd.emptyB(), // "emptied pd "+i+","+j+","+k+" "+pair.toString()); } recoverSolution(i, j); } } else { j = pair.aF(); recoverSolution(i, j); if (k - j > 1) { if (pair.aF() != pair.bF()) { PairDeque pd = subD.pairs(j, k); pd.restore(); while ((!pd.empty()) && pair.bF() != pd.bF()) pd.pop(); // assert(!pd.empty(), // "emptied pd "+i+","+j+","+k+" "+pair.toString()); } recoverSolution(j, k); } } }