Sunteți pe pagina 1din 11

• Backtracking

– generare permutări, generare aranjamente, generare


combinări, colorare hartă cu n ţări folosind cel mult 4 culori
(ţările vecine sunt colorate diferit), problema comis-voiajorului
(vizitarea unică a oraşelor) (Traveling Salesman Problem),
plata unei sume dintr-o colecţie de monede, DINAR + MARCA
+ FRAC = MONEDE, problema labirintului (m linii, n coloane),
colorarea unei suprafeţe închise, drapele tricolore cu 6 culori,
etc.
– interativ
– recursiv
• Plasarea a N regine pe o tablă de dimensiune
NxN

08.12.21 Curs 6 – Backtracking 1


Curs 6 - Backtracking
• Pt anumite probleme, când nu avem alte metode
la dispoziţie
• Verifică toate posibilităţile din spaţiul soluţiilor
• Ipoteze
– Soluţia problemei se scrie sub forma unui vector,
S   x1 x2  xn 
– Elementele vectorului aparţin unor mulţimi finite, între ele
existând o relaţie de ordine
xi  Ai , card Ai   

08.12.21 Curs 6 – Backtracking 2


Curs 6 - Backtracking
• Construim o soluţie parţială, S k   x1 x2  xk  .
Extindem această soluţie şi o testăm.
• Dacă soluţia parţială este validă,
• continuăm.
• altfel
• încercăm altă valoare pt x(k).
• Dc am testat toate valorile posibile pt x(k), fără
succes, ne întoarcem pe poziţia k-1, încercând
valorile care au mai rămas pt x(k-1).

08.12.21 Curs 6 – Backtracking 3


Curs 6 - Backtracking
• Implementare iterativă
– void backtrackingIterativ(n)
• k = 1//adaugam primul element in vectorul solutiilor
• initializareSolutie(k)
• while(k>0)
» if(potCompletaSolutie(k))//am gasit o solutie valida pt k
» if(solutieFinala)//am atins dimensiunea vectorului
» tiparesteSolutia;
» numaraSolutia;
» else
» k++;
» initializareSolutie(k+1)
» else k--

08.12.21 Curs 6 – Backtracking 4


Curs 6 - Backtracking
• Implementare recursivă
– void backtrackingRecursiv(k, n)
• if(k = n+1)//solutie finala
» tiparesteSolutia;
• else
» for(toate valorile posibile pt x(k))
» if(x(k) este valida) //am gasit o solutie valida pt k
» backtrackingRecursiv(k+1, n)
» //apelam functia pt pozitia k+1 din vectorul
solutie
• x(k) = 0;

08.12.21 Curs 6 – Backtracking 5


Curs 6 - Backtracking
• Plasarea a 4 regine S   x1 x2 x3 x4 

Q Q Q
Q Q

Q
Q
Q

08.12.21 Curs 6 – Backtracking 6


Curs 6 - Backtracking
• Plasarea a 4 regine S   2 4 1 3

Q Q Q
Q Q
Q

Q
Q
Q
Q
08.12.21 Curs 6 – Backtracking 7
Curs 6 - Backtracking
• Plasarea a 4 regine S   3 1 4 2

Q Q Q
Q Q
Q

Q
Q
Q
Q
08.12.21 Curs 6 – Backtracking 8
Curs 6 - Backtracking
• Plasarea a 4 regine S   2 4 1 3

Q Q
Q Q
Q Q
Q Q

Oglindire faţă de x  o singură soluţie este unică

08.12.21 Curs 6 – Backtracking 9


Curs 6 - Backtracking
• Găsirea soluţiilor unice  cos   sin  
– rotire în sens trigonometric cu: R    
 sin  cos  
• 90, 180, 270 grade
 0  1
 x, y  T
  y, x  , R 90  
R 90 T

1 0 
 1 0 
 x, y  T   x, y  , R180  
R 180 T

 0  1
 0 1
 x, y  T
 y, x  , R 270

R 270 T
  
 1 0
– Identitate/ rotire cu 360 grade
1 0
 x, y  T
 x, y  , R 360

R 360 T
  
0 1
08.12.21 Curs 6 – Backtracking 10
Curs 6 - Backtracking
• Găsirea soluţiilor unice
– Oglindire faţă de x, y, diagonala 45, diagonala -45
1 0 
 x, y  T
 x, y  , O x  
x T

 0  1
 1 0
 x, y  T   x, y  , O y  
y T

 0 1
0 1
 x, y  T  y, x  , O 45  
 45 T

1 0
 0  1
 x, y  T   y, x  , O  45  
 45 T

 1 0 

• 8 matrice, pt spaţiul bidimensional n!2 n


08.12.21 Curs 6 – Backtracking 11

S-ar putea să vă placă și