mi aiutate a capire questo algoritmo di risoluzione di un problema attraverso il backtracking (in particolare dal punto marchiato con ***)? che utilizza i concetti di punto di scelta e scelta (applicabili a esempi quali colorazione di una mappa). grazie, anche qualche appunto su algoritmi simili
codice:
/**
* Metodo implementato che permette di risolvere un problema
* attraverso punto di scelta e scelta
*/
public void risolvi(){
P ps=primoPuntoDiScelta();
S s= primaScelta ( ps );
boolean backtrack=false, fine=false;
do{
while(!backtrack && nr_soluzione<num_max_soluzioni){
if(assegnabile(s, ps)){
assegna(s, ps);
if(ps.equals(ultimoPuntoDiScelta())){ // ***
nr_soluzione++;
scriviSoluzione(nr_soluzione);
deassegna(s, ps);
if(!s.equals(ultimaScelta(ps)))
s=prossimaScelta(s);
else
backtrack=true;
}
else{
ps=prossimoPuntoDiScelta(ps);
s=primaScelta(ps); }
}else
if(!s.equals(ultimaScelta(ps)))
s=prossimaScelta(s);
else
backtrack=true;
}
fine=ps.equals(primoPuntoDiScelta()) || nr_soluzione==num_max_soluzioni;
while(backtrack&&!fine){
ps=precedentePuntoDiScelta(ps);
s=ultimaSceltaAssegnataA(ps);
deassegna(s, ps);
if(!s.equals(ultimaScelta(ps))){
s=prossimaScelta(s);
backtrack=false;
}
else
if(ps.equals(primoPuntoDiScelta()))
fine=true;
}
}while(!fine);
}