Sunteți pe pagina 1din 6

Universitatea Tehnică a Moldovei

Catedra Automatică și Tehnologii Informaționale

RAPORT
despre lucrarea de laborator nr. 6

la Programarea Calculatoarelor
Tema: Analiza algoritmilor ale tehnicii programarii

A îndeplinit: studentul grupei TI-172, Parasii Alexandru


A controlat: Motpan Sergiu

CHIȘINĂU
2018
 Scopul lucrării:
Insusirea materialului teoretic pentru evidentierea esentialului tehnicilor programarii.
Analiza esentei metodelor tenicii de programare si specificul programarii.
Studierea metodei backtracking.

 Sarcina lucrării:
De efectuat un program care sa amplaseze pe o tabla de sah NxN numarul maxim de
regine, fara ca acestea sa se atace.

 Mersul lucrării:

NOȚIUNI GENERALE

 Backtracking este numele unui algoritm general de descoperire a tuturor soluțiilor unei
probleme de calcul, algoritm ce se bazează pe construirea incrementală de soluții-candidat,
abandonând fiecare candidat parțial imediat ce devine clar că acesta nu are șanse să devină o soluție
validă.
 Metoda de programare Greedy se aplică problemelor de optimizare. Aceasta metoda constă în
faptul că se construieşte solutia optimă pas cu pas, la fiecare pas fiind selectat în solutie elementul
care pare „cel mai bun/cel mai optim” la momentul respectiv, în speranta că această alegere locală
va conduce la optimul global.
Metoda Greedy se aplică problemelor pentru care se dă o mulţime A cu n elemente şi pentru
care trebuie determinată o submulţime a sa, S cu m elemente, care îndeplinesc anumite condiţii,
numite si conditii de optim.
 Divide et impera se bazează pe principiul descompunerii problemei în două sau mai multe
subprobleme (mai ușoare), care se rezolvă, iar soluția pentru problema inițială se obține combinând
soluțiile subproblemelor. De multe ori, subproblemele sunt de același tip și pentru fiecare din ele se
poate aplica aceeași tactică a descompunerii în (alte) subprobleme, până când (în urma
descompunerilor repetate) se ajunge la probleme care admit rezolvare imediată.
 Textul programului:

#define N 4
#include "stdio.h"
#include "stdbool.h"

void printSol (int Tab[N][N])


{
printf("\nSolutie:\n" );
for(int i=0; i<N; i++)
{
for (int j=0; j<N; j++)
printf(" %d",Tab[i][j] );
printf("\n" );
}
}

bool posibil (int Tab[N][N], int lin, int col)


{
int i,j;

//Verificam linia
for (i=col; i>=0; i--)
if (Tab[lin][i]) return false;

//verificam diagonala principala


for (i=lin, j=col; i>=0 && j>=0; i--, j--)
if (Tab[i][j]) return false;

//verificam diagonala secundara


for (i=lin, j=col; i<N && j>=0; i++, j--)
if (Tab[i][j]) return false;

//regina poate fi amplasata in aceasta pozitie


return true;
}

bool regina (int Tab[N][N], int col)


{
//Daca s-a ajuns la ultima coloana, se incheie functia.
if (col>=N) return true;

int i;
//Se introduce regina in una din liniile coloanei "col"
for (i=0; i<N; i++)
{
if (posibil(Tab, i, col))
{
Tab[i][col] = 1;

//Introducem alte regine


if (regina(Tab, col+1)) return true;

//Daca nu se genereaza rezultatul, se sterge ultima regina introdusa


Tab[i][col]=0;
}
}
return false;
}

void fun()
{
int Tab[N][N]={0};

if (regina(Tab,0)==false)
printf("\nSolutii nu exista!\n");

else
printSol(Tab);
}

void main()
{
fun();
}
 Schema-bloc:
Start

fun();

Sfarsit

Start Start
fun() regina()

Tab[N][N] ={0}; Da col >=N

regina(Tab,0)
NU return true;
== false i =0;

i ++
Da
printSol(Tab); i<N
Solutii nu exista

Nu
posibil (Tab, i, col)
Sfarsit
Da
return false;
Tab[i][col] = 1;

Tab[i][col] = 0;
regina
(Tab, i + 1)
Nu

Da

return true;

Sfarsit
 Screen-shots:

 Concluzie:
In urma efectuarii lucrarii date, am facut cunostinta cu metoda BACKTRACKING,
care poseda un potential enorm. Experienta acumulata este una foarte valoroasa, care imi va fi
utila in viitor.
Metoda data permite verificarea rezultatelor intermediare anterioare, iar, in caz ca ele
nu duc la obtinerea solutiei, se sterg. Este esential de a seta conditiile de oprire corecte, din
cauza ca algoritmul este unul recursiv, ceea ce inseamna ca pot aparea cicluri infinite.
Totodata, conditia de gaseire a solutiei, are si ea o insemnatate majora. In caz ca nu va fi scrisa
corect, programul va genera o solutie falsa.

S-ar putea să vă placă și