Documente Academic
Documente Profesional
Documente Cultură
Sunt probleme care se rezolvă cu metoda backtracking şi în care se cere o singură soluţie.
Implementarea presupune utilizarea unei variabile de semnalizare (de exemplu, variabila gata) care să
fie iniţial 0, la obţinerea soluţiei dorite aceasta primind valoarea 1. Orice succesor va fi condiţionat în plus
de valoarea variabilei gata.
Problema colorării hărţilor. Fiind dată o hartă cu n ţări, se cere o soluţie de colorare a hărţii,
utilizând cel mult 4 culori, astfel încât două ţări cu frontieră comună să fie colorate diferit.
Este demonstrat faptul că sunt suficiente numai 4 culori pentru ca orice hartă să poată fi colorată.
Pentru exemplificare, vom considera harta din figura 1, unde ţările sunt numerotate cu cifre cuprinse între
1 şi 5.
• ţara 1 - culoarea 1;
• ţara 2 - culoarea 2;
• ţara 3 - culoarea 1;
• ţara 4 - culoarea 3;
• ţara 5 - culoarea 4.
Figura 1.
01010
10111
01001
11001
01110
Matricea A este simetrică. Pentru rezolvarea problemei se utilizează vectorul x, unde x[k] reţine culoarea
ataşată ţării k. Evident, orice soluţie are exact n componente.
#include <bits/stdc++.h>
void afisare()
cout << "tara " << i << " are culoarea " << x[i] << "\n";
bool valid(int k)
return true;
void back(int k)
x[k] = i;
if(valid(k))
if(k == n) afisare();
int main()
{
int i, j;
cout << "Tara " << i << " este vecina cu tara " << j << " ?
[1/0] ";
a[j][i] = a[i][j];
back(1);
else cout << "Avem " << nr << " solutii" << "\n";
return 0;