Documente Academic
Documente Profesional
Documente Cultură
Raport
Chisinău 2018
Cuprin
s
2
1. Scopul și obiectivele lucrării:
3
7. Sarcina
Sarcina lucrarii de laborator numarul 6 este ca noi sa cercetaum un program ce foloseste metoda
backtracking pentru a rezolva o anumita cerita ,iar noi trebue sa cunoastem teoria
oferita de profesor pentru a putea expica mersul lucrarii.
Cerinta:
Problema 13. Problema “matricilor”. Sa se genereze toate matricile nxn
ce contin elemente distincte din multimea 1,...,n2 astfel încât pe fiecare
linie elementele sa fie în ordine crescatoare.
4
8. Schema bloc
5
a)Programul main();
b)Funtia back();
6
b)Funtia
7
9. Realizarea
Solutia folosita se bazeaza pe metoda backtracking si este realizata
recursiv. Elementele se introduc în matrice crescator pe linii, iar în cadrul
liniei, crescator dupa coloana, cu ajutorul procedurii recursive BACK(i,j).
Functia POSIBIL(i,j) verifica daca elementul din matrice de pe pozitia i,j
corespunde conditiilor impuse de problema.
8
Concluzii
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ă.Deci in concluzie pot afirma ca
Bibliografie
9
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/.
Anexa A :Figura 1
#include <stdio.h>
#include <conio.h>
//Sa se genereze toate matricile nxn ce contin elemente distincte din multimea 1,...,n2
astfel incat pe fiecare linie elementele sa fie in ordine crescatoare.
int n,a[20][20],Nr=1;
//Funtia verifica daca noua matrice corespunde conditiei necesare
int posibil(int i,int j)
{ int l,k;
for(k=1;k<=i-1;k++)
for(l=1;l<=n;l++)
if (a[i][j]==a[k][l])
return 0;
if ((j) && (a[i][j]<=a[i][j-1]))
return 0;
return 1;
}
//Funtia afiseaza matricele generate pe ecran
void tiparire(void)
{ printf("\n");
printf("Matricea Nr.%d",Nr++);
int i , j;
for( i=1;i<=n;i++) {
printf("\n ");
for( j=1;j<=n;j++)
printf(" %d",a[i][j]);}
printf("\nTastati o tasta!\n");
getch();
}
//Funtia folosind metoda backtracking,creaza noile matrice si apoi cu ajutorul functiilor
anterioare verifica daca ea corespunde conditie si daca da o afiseaza pe ecran
void back(int i,int j)
{ int k;
for(k=1;k<=n*n;k++) {
a[i][j]=k;
if (posibil(i,j))
if ((i==n) && (j==n))
tiparire();
else
if (j==n)
back(i+1,1);
10
else
back(i,j+1);}
}
//Funtia principala ce lucreza cu funtiile anterioare
void main(void)
{ n=2;
clrscr();
back(1,1);
getch();
}
Anexa B
Rezultatul Afisarii programului pe ecran:
11