|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Backtracking recursiv | ||||||
|
||||||
In capitolul 1 am prezentat rutina de backtracking clasica,nerecursiva.In acest
capitol prezentam rutina de backtracking recursiva.Procedurile si functiile
folosite sunt in general aceleasi,cu doua mici exceptii: g8c19cy Vom explica in continuare utilizarea backtrackingului recursiv prin generarea permutarilor: program permutari; type stiva=arraya1..9i of integer; var st:stiva; ev:boolean;n,k:integer; procedure init(k:integer;var st:stiva); begin staki:=0; end; function succesor(var st:stiva;k:integer):boolean; begin if staki<n then begin staki:=staki+1; succesor:=true; end else succesor:=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 staii=staki then ev:=false; end; function solutie(k:integer):boolean; begin solutie:=(k=n+1); end; procedure tipar; var i:integer; begin for i:=1 to n do writeln(staii); while succesor(st,k) do begin valid(ev,st,k); if ev then back(k+1); end; end; end; begin Desigur orice problema care admite rezolvare backtracking,poate fi rezolvata in acest mod.Insa,de multe ori,aceeasi problema se poate rezolva scriind mai putin,daca renuntam la standardizare. |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|