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); }

Rispondi quotando
