Documente Academic
Documente Profesional
Documente Cultură
WWW - Referate Lucrari - Com 84 Informatica Colorarea Unei Harti Folosind Metoda Backtracking
WWW - Referate Lucrari - Com 84 Informatica Colorarea Unei Harti Folosind Metoda Backtracking
C.D. NENIESCU
CRAIOVA
LUCRARE DE DIPLOM
PROFESOR:
TOADER ELENA
2004
TEMA LUCRRII:
COLORAREA HRILOR FOLOSIND METODA BACKTRACKING
CUPRINS:
1. METODA BACKTRACKING
2. APLICAII REZOLVATE
13
METODA BACKTRACKING
NOIUNI GENERALE
APLICAII REZOLVATE
Exemple:
Generarea permutrilor. Se citete un numr natural n. S se genereze toate
permutrile mulimii {1, 2, 3, ,n}.
Generarea permutrilor se va face innd cont c orice permutare va fi
alctuit din elemente distincte ale mulimii A. Din acest motiv, la generarea unei
permutri, vom urmri ca numerele s fie distincte.
Prezentm algoritmul corespunztor cazului n=3:
1
1
2
1
1
2
1
3
1
1
3
1
2
3
1
3
3
1
1
1
2
2
1
2
3
1
2
2
2
2
2
1
3
2
1
1
2
3
2
1
3
2
D
8
D
D
D
Algoritmul continu n acest mod pn cnd trebuie scoas de pe tabl prima
dam.
Pentru prezentarea unei soluii putem folosi un vector cu n componente
(avnd n vedere c pe fiecare linie se gsete o singur dam). Exemplu: pentru
soluia gsit avem vectorul st ce poate fi asimilat unei stive.
Dou dame se gsesc pe aceeai diagonal dac i numai dac este ndeplinit
condiia. |st (i) st (j)| = |i-j| : (diferena, n modul, ntre linii i coloane este
aceeai).
3
ST (4)
ST (3)
ST (2)
ST (1)
Sau situaia:
D
St (1) = 3 i = 1;
St (3) = 1 j = 3;
| St (i) st (j) | = |3 1| = 2
|i j| = |3 1| = 2
ntruct dou dame nu se pot gsi pe aceeai coloan, rezult c o soluie este
sub form de permutare. O prim idee ne conduce la generarea tuturor permutrilor
i la extragerea soluiilor pentru problem (ca dou dame s nu fie plasate n aceeai
diagonal). A proceda astfel, nseamn s lucr conform strategiei backtracking.
Aceasta presupune ca imediat ce am gsit dou dame care se atac, s relum
cutarea. Fa de programul de generare a tuturor soluiilor problemei celor n dame,
are o singur condiie suplimentar, n procedura valid.
Produsul cartezian a n mulimi. Se dau mulimile de mai jos i se cere
produsul cartezian al lor.
A1 = {1, 2, 3, , k1}
A2 = {1, 2, 3, , k2}
An = {1, 2, 3, , kn}
Exemplu:
A1 = {1, 2}
A2 = {1, 2, 3}
A3 = {1, 2, 3}
A1 A2 A3 = {(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3,
1), (1, 3, 2), (1, 3, 3), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3,
1), (2, 3, 2), (2, 3, 3)}.
Pentru rezolvare, se folosesc stiva ST i un vector A ce reine numerele k 1, k2,
kn. Utilizm metoda backtracking, uor modificat din urmtoarele motive:
a) Orice element aflat la nivelul k al stivei este valid, motiv pentru care
procedura valid nu face altceva dect s atribuie variabilei ev valoarea
TRUE.
b) Limita superioar pe nivelul k al stivei este dat de A(k).
Modul de concepere a algoritmului rezult din cele ce urmeaz:
10
Observaii:
Algoritmul prezentat aici este de tip backtracking? ntrebarea are sens
pentru c este absent mecanismul de ntoarcere. Vom admite c i aceasta
este backtracking, dar degenerat.
Generarea aranjamentelor. Se citesc n i p. S se genereze toate
aranjamentele de n luate cte p.
Din analiza problemei rezult urmtoarele:
stiva are nlimea p;
fiecare nivel ia valori ntre 1 i n;
elementele plasate pe diverse niveluri trebuie s fie distincte.
Algoritmul este asemntor cu cel de la permutri, cu deosebirea c aici stipa
are nlimea p.
Generarea combinrilor. Se citesc n i p numere naturale, np. Se cere s se
genereze toate submulimile cu p elemente ale mulimii {1, 2, 3, , n}.
Pentru rezolvarea problemei trebuie inut cont de urmtoarele:
stiva are nlimea p;
elementele aflate pe niveluri diferite ale stivei trebuie s fie distincte;
pentru a evita repetiia elementele se aeaz n ordine cresctoare: pe nivelul
k se va afla o valoare mai mare dect pe nivelul k-1 i mai mic sau egal cu n-p+k.
Problema comis-voiajorului. Un comis voiajor trebuie s viziteze un numr
n de orae. Iniial, el se afl ntr-unul dintre ele, notat 1. Comis voiajorul dorete
s nu treac de dou ori prin acelai ora, iar la ntoarcere s revin n oraul 1.
Cunoscnd legturile existente ntre orae, se cere s se tipreasc toate drumurile
posibile pe care le poate efectua comis voiajorul.
Exemplu: n figura alturat sunt simbolizate cele 6 orae, precum i
drumurile existente ntre ele.
11
altfel
2
2
1
3
2
1
2.
Menionm
13
altfel
Rezolvare PASCAL:
Program colorarea_hartilor;
Type
stiva = array [1100] of integer;
var
st : stiva;
i, j, n, k : integer;
as, ev : boolean;
a: array [1..20,1..20] of integer;
procedure init(k:integer; var st:stiva);
begin
st[k]:=0;
end;
procedure succesor(var as:boolean; var st:stiva; k:integer);
begin
if st[k] < 4
then
begin
st[k]:=st[k]+1;
as:true
end
else
as:false
end;
procedure valid (var ev:boolean; st:stiva; k:integer);
var
i:integer;
begin
ev:true;
for i:=1 to k-1 do
if (st[i]=st[k]) and (a[i,k]=1)
then
ev:false
end;
function solutie(k:integer):integer;
begin
solutie:=(k=n);
end;
15
procedure tipar;
var
i:integer;
begin
for i:= 1 to n do
writeln(Tara =, i,; culoarea=,st[i]);
writeln(===================);
end;
begin
write(Numarul de tari = );
readln(n);
for i:= 1 to n do
for j:=1 to i-1 do
begin
write(a[,i,,,j,]=);
readln(a[i,j])
end;
k:=1;
init(k,st);
while k>0 do
begin
repeat
succesor(as,st,k);
if as
then
valid(ev,st,k);
until (not as) or (as and ev);
if as
then
if solutie (k)
then
tipar
else
begin
k:=k+1;
init(k,st)
end
else
k:=k-1
end
end.
16