Sunteți pe pagina 1din 16

Universitatea Tehnică a Moldovei

Catedra Automatică și Tehnologii Informaționale

Disciplina Structuri de date si algoritmi

Varianta 7

Raport

Tema: Analiza algoritmilor ale TEHNICII PROGRAMĂRII

A realizat student grupa TI-

A verificat Moțpan Serghei

Chisinău 2018
Cuprin

2
s

1. Scopul și obiectivele lucrării....................................................................................................3


2. Sarcina......................................................................................................................................4
3. Schema bloc.............................................................................................................................5
4. Realizarea.................................................................................................................................7
Concluzii..........................................................................................................................................8
Bibliografie......................................................................................................................................9
Anexa A.........................................................................................................................................10
Anexa B.........................................................................................................................................11

3
1. Scopul și obiectivele lucrării

De studiat şi însuşit materialul teoretic pentru evidenţierea esenţialului tehnicilor de


programare în elaborarea modelelor soluţiei problemelor: esenţa metodelor (strategiilor
tehnicilor de programare) şi specificul realizării;

Să se analizeze şi să se descrie tehnica modelării şi scenariile programării eficiente pentru


diverse compartimente ale diferitor situaţii cu argumentări şi modele de structuri
abstracte;

Să se preia varianta problemei din compartimentul “3.Problemele cu exemple pentru


însuşire, modificare şi rulare”, pentru analiză, aprofundare şi rularea programelor în
limbajul C;

Să se elaboreze scenariile succinte de modificare, incluzând pointeri, subprograme şi


fişiere cu teste de verificare şi vizualizări şi explicaţii la principalele subprograme prin
schemele logice.
a.

4
2. Sarcina
Sa se rezolve un labirint intr-un tablou bidimensional utilizind tehnica backtracking.

5
3. Schema bloc

6
Figura 1 Schema bloc pentru functia main

7
Figura 2 Schema bloc pentru functia solve

8
4. Realizarea

Programul dat are ca scop să primeasca o matrice bidimensionala care contine un labirint si
sa-l resolve prin metoda backtracking.
bool solve(int row, int col, // use for recursion

int target_row, int target_col) // use for endpoint checking

if(row == target_row && col == target_col)

return true;

static int next_pos[4][2] = {

{1, 0}, // go above

{0, 1}, // go right

{-1, 0}, // go below

{0, -1} // go left

};

for(int i = 0; i < 4; i++) {

int next_row = row + next_pos[i][0];

int next_col = col + next_pos[i][1];

if(isSafe(next_row, next_col) == true) {

board[next_row][next_col] = '*';

if(solve(next_row, next_col, target_row, target_col) == true)

return true;
9
else

board[next_row][next_col] = 0;

return false;

10
Concluzii

Lucrarea dată a avut ca scop să ne învețe esenţialul prelucrării structurilor de date prin
diferite metode de programare, fiecare având specificul ei de utilizare. Spre exemplu:

Backtracking - este o metodă de parcurgere sistematică a spaţiului soluţiilor posibile al


unei probleme. Este o metodă generală de programare, şi poate fi adaptă pentru orice problemă
pentru care dorim să obţinem toate soluţiile posibile, sau să selectăm o soluţie optimă, din
mulţimea soluţiilor posibile. Backtracking este însă şi cea mai costisitoare metodă din punct de
vedere al timpului de execuţie.

11
Bibliografie

1. The GNU C Reference Manual. [Interactiv] https://www.gnu.org/software/gnu-c-


manual/gnu-c-manual.html.
2. The C Library Reference Guide. [Interactiv] https://www-
s.acm.illinois.edu/webmonkeys/book/c_guide/.

12
Anexa A

Figura 3 Rezultatul executiei programului

13
Anexa B
#include <stdio.h>
#include <stdbool.h>
#include <time.h>
#define N 6

// 0 = valid box to step


// x = invalid box to step (halangan)
char board[N][N] = {
{ 0 ,'x','x','x','x','x'},
{ 0 , 0 , 0 ,'x', 0 ,'x'},
{'x','x', 0 ,'x', 0 ,'x'},
{ 0 , 0 , 0 , 0 , 0 ,'x'},
{'x','x', 0 ,'x', 'x' ,'x'},
{'x','x', 0 , 0 , 0 , 0 }
};

void draw() {

char linelen[] = "---------------------------";

for(int row = 0; row < N; row++, puts(linelen)) {


if(row == 0) puts(linelen);
for(int col = 0; col < N; col++) {
if(col == 0) printf(" |");
printf(" %c |%c", board[row][col] == 0 ? ' ' : board[row][col],
(col == N-1) ? '\n' : '\0');
}
}
}

bool isSafe(int row, int col) {

if(board[row][col] == 'x')
return false;
14
else if(row < 0 || row >= N)
return false;

else if(col < 0 || col >= N)


return false;

else if(board[row][col] == 1)
return false;

return true;

bool solve(int row, int col, // use for recursion


int target_row, int target_col) // use for endpoint checking
{

if(row == target_row && col == target_col)


return true;

static int next_pos[4][2] = {


{1, 0}, // go above
{0, 1}, // go right
{-1, 0}, // go below
{0, -1} // go left
};

for(int i = 0; i < 4; i++) {

int next_row = row + next_pos[i][0];


int next_col = col + next_pos[i][1];

if(isSafe(next_row, next_col) == true) {

board[next_row][next_col] = '*';

15
if(solve(next_row, next_col, target_row, target_col) == true)
return true;
else
board[next_row][next_col] = 0;

}
}

return false;
}

int main() {
double start, stop;
start=clock();
board[0][0] = '*';

if(solve(0, 0, N-1, N-1) == true) {


draw();
puts("Origin : (0,0)");
puts("Ending : (5,5)");
} else {
puts("Failed to find path for rat");
}
stop=clock();

return 0;
}

16

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