📘 Lecție de C++ pentru clasa a 11-a și olimpiadă, cu explicații video de la profesor. Mai jos ai rezumatul. În lecția completă găsești aplicații rezolvate cu simulator, în care vezi pas cu pas cum se schimbă variabilele, compilator C++ în browser, exerciții propuse cu indicii și rezolvare, și pe Alex, asistentul care îți dă indicii, îți explică algoritmul și îți corectează codul.
🎯 Apare la BAC? Nu. Backtracking-ul în plan și algoritmul fill sunt pentru olimpiadă.
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};
void bt(int x, int y) {
if (x == xf && y == yf) { afiseaza(); return; }
for (int d = 0; d < 4; d++) {
int nx = x + dx[d], ny = y + dy[d];
if (valid(nx, ny) && !viz[nx][ny]) {
viz[nx][ny] = 1;
bt(nx, ny);
viz[nx][ny] = 0;
}
}
}
1. Ce sunt vectorii de direcție dx și dy? Doi vectori care codifică deplasările sus, dreapta, jos, stânga, ca să parcurgi vecinii cu o singură buclă.
2. Cum marchez celulele vizitate? Cu o matrice viz: pui 1 când intri în celulă și 0 când revii din ea.
3. Câți vecini are o celulă în matrice? 4 (sus, jos, stânga, dreapta) sau 8 dacă se iau și diagonalele.
4. Ce este algoritmul fill? Un algoritm care umple o zonă dintr-o matrice pornind dintr-o celulă și extinzându-se recursiv la vecinii valizi.
5. Care e diferența dintre fill și backtracking în labirint? La fill o celulă vizitată rămâne marcată. La backtracking o demarchezi la revenire, ca să poți găsi toate drumurile.