Ejemplo n.º 1
0
 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);
     }
   }
 }