Documente Academic
Documente Profesional
Documente Cultură
int succesor ( )
{ if (st[k]<n)
{st[k]++;
return 1;
}
else return 0;
}
Rezolvare (funcţia de validare)
int valid( )
{ for(int i=1; i<k; i++)
if ( (st[k]==st[i]) || (abs(st[k]-st[i])==abs(k-i)) )
return 0;
return 1;
}
Rezolvare (funcţia solutie şi tipar)
int solutie ( )
{return k==n;}
void tipar( )
{for (int i=1; i<=n; i++) cout<<st[i];
cout<<endl;
}
Rezolvare (funcţia BKT)
void back()
{int as;k=1;
init();
while(k>0)
{
do { } while ((as=succesor()) && !valid());
if (as)
if (solutie()) tipar();
else {k++; init(); }
else k- -;
}
}
Rezolvare (progr principal)
void main( )
{ cout<<"n="; cin>>n;
back( );
}
Problema colorării hărţilor
Fiind dată o hartă cu n ţări, se cer
toate soluţiile de colorare a hărţii
utilizând cel mult 4 culori, astfel încât
două ţări cu frontiera comună să fie
colorate diferit.
Problema comis-voiajorului
Un comis – voiajor trebuie să viziteze un
număr n de oraşe. Iniţial, acesta se află
într-unul dintre ele, notat cu 1.
Comis – voiajorul doreşte să nu treacă de
două ori prin acelaşi oraş, iar la întoarcere
să revină în oraşul 1. Cunoscând legăturile
existente între oraşe, se cere să se
tipărească toate drumurile posibile pe care
le poate efectua comis – voiajorul.
Problema labirintului
Se dă un labirint sub formă de matrice cu
m linii şi n coloane. Fiecare element al
matricei egal cu 0 reprezintă o cameră a
labirintului. Elementele egale cu 1
reprzintă obstacole. Într-una din camere,
de coordonate x şi y, se află un om. Se
cere să se găsească toate ieşirile din
labirint.
Problema fotografiei
O fotografie alb – negru este prezentată
sub forma unei matrice binare. Ea
înfăţisează unul sau mai multe obiecte.
Porţiunile corespunzătoare obiectului în
matrice au valoarea 1.
Se cere să se determine dacă fotografia
reprezintă unul sau mai multe obiecte.
Câte obiecte sunt în fiecare din cele două imagini?
1 1 0 0
0 0 0 1
A=
1 1 1 1 0 1 1 0
0 0 0 1
1 1 1 1 A=
0 1 1 1
1 0 0 0
Concluzii
Tehnica backtracking este folosită în
problemele de optimizare.
Programarea prin tehnica backtracking se
utilizează în programarea roboţilor autonomi,
viziune artificială, prelucrarea imaginilor,
controlul inteligent al traficului, realizarea
reţelelor de calculatoare, tehnici de brokeraj,
etc.