Documente online.
Zona de administrare documente. Fisierele tale
Am uitat parola x Creaza cont nou
 HomeExploreaza
upload
Upload




Backtracking

Informatica


Backtracking

Backtracking sau "algoritmul cu revenire" este un algoritm exponential, ce ajuta la rezolvarea unor probleme cu aproape o infinitate de solutii (de unde si clasificarea de algoritm exponential).



Problema cea mai simpla pentru prezentarea algoritmului backtracking este aceea a ge 222t1917c nerarii permutarilor multimii numerelor de la 1 la n, cu n numar natural pozitiv introdus de la tastatura. Pentru acesta se genereaza toate combinatiile de numere distincte de la 1 la n.

Exemplu: Pentru n=3 se genereaza solutiile 123, 132, 213, 231, 312, 321.

Mai jos sunt prezentate programele de rezolvare a problemei in limbajele Turbo Pascal si C++.

Programul in limbajul Turbo Pascal

program permutari;

var

st: array[1..10] of integer;

i,j,n: integer;

c: longint;

procedure initializare;

begin

for i:=1 to n do

st[i]:=0;

end;

function valid (var p: integer): boolean;

var

sol: boolean;

begin

sol:=true;

for i:=1 to p do

for j:=i+1 to p do

if st[i]=st[j] then

sol:=false;

valid:=sol;

end;

procedure tipar;

begin

c:=c+1;

write(c:10,' ');

for i:=1 to n do

write(st[i]);

writeln;

end;

procedure bckt(p: integer);

var

val: integer;

begin

for val:=1 to n do

begin

st[p] := val;

if ( valid(p) ) then

if (p=n) then

tipar

else

bckt(p+1);

end;

end;

begin

write('Introduceti un numar: ');

readln(n);

initializare;

c:=0;

bckt(1);

writeln('Exista ',c,' solutii!');

readln;

end.

Programul in limbajul C++

#include "iostream.h"

#include "conio.h"

int n, st[10];

void initializare() // initializeaza stiva si citeste n

void tipar(int p) // tipareste o solutie memorata in vectorul st

int valid (int p)

// testeaza daca valoarea pusa pe nivelul p genereaza o solutie valida,

// returnind 1 sau 0

void bktr (int p) // algoritmul backtracking

void main()

Saritura calului pe tabla de sah

O alta problema clasica este aceea a sariturii calului pe o tabla de sah: Se cere sa se gaseasca un traseu complet care acopera tabla de sah, generat adoptind saritura calului fara a trece de doua ori prin aceeasi pozitie. Iata programul in limbajul C++.

#include "iostream.h"

#include "conio.h"

int n, st[9][9], solutie, tip;

void initializare() // initializeaza matricea

void tipar() //

}

else

if (solutie%50==0)

cout << "-";

int valid ()

// testeaza daca valoarea pusa pe nivelul p genereaza o solutie valida,

// returnind 1 sau 0

posibil=1;

for (i=1; i<=n; i++)

for (j=1; j<=n; j++)

if (st[i][j]==0)

posibil=0;

return (posibil);

void sterge(int val)

void bktr (int a, int b, int val) //

}

else

}

}

void main()

}

if (solutie==0)

cout << "Nu exista solutii!";

else

cout << "Exista " << solutie << " solutii!";

getch();


Document Info


Accesari: 4931
Apreciat: hand-up

Comenteaza documentul:

Nu esti inregistrat
Trebuie sa fii utilizator inregistrat pentru a putea comenta


Creaza cont nou

A fost util?

Daca documentul a fost util si crezi ca merita
sa adaugi un link catre el la tine in site


in pagina web a site-ului tau.




eCoduri.com - coduri postale, contabile, CAEN sau bancare

Politica de confidentialitate | Termenii si conditii de utilizare




Copyright © Contact (SCRIGROUP Int. 2024 )