Gandirea algoritmica
Structura unui program si a unei functii in C
Constructiile de bază ale limbajului C – Notiuni generale
Constructiile de baza ale limbajului C – Tipuri de date
Constructiile de baza ale limbajului C – Operatori
Structuri de date – Lista liniara simplu inlantuita
Structuri de date – Stiva (LIFO – Last In First Out)
Structuri de date – Coada (FIFO – First In First Out)
Instructiuni ale limbajului C
Pointeri – Operatori specifici, tablouri, functii
Pointeri – Tipuri structurate de date
Functii de biblioteca
Operatii cu fisiere
Calcul Matriceal – Produsul a doua matrici
Calcul Matriceal – Inversarea unei matrici
Calcul Matricial – Metoda lui Gauss
Metode de sortare – sortare ordinara
Metode de sortare – prin selectie (Selection sort)
Metode de sortare – insertie directa (Direct Insertion Sort)
Metode de sortare – insertie binara (Binary Insertion Sort)
Metode de sortare – insertie directa folosind o santinela
Metode de sortare – metoda bulelor (Bubble Sort)
Metode de sortare – sortare rapida (Quick Sort)
Metode de sortare – prin interclasare (Merge Sort)
Recursivitate (numar factorial, algoritmul lui Euclid recursiv, sirul lui Fibonacci)
Backtracking – permutarile
Backtracking – aranjamente
Backtracking – combinari
Backtracking – problema reginelor
Backtracking – problema labirintului
Backtracking – problema calului
Backtracking – problema mingii
Metoda Divide et Impera – Suma elementelor unui sir
Metoda Divide et Impera – Problema Turnurilor din Hanoi
Metoda Divide et Impera – Elementul maxim intr-un sir
Metoda Divide et Impera – Problema cautarii binare
Grafuri neorientate – parcurgerea in latime
Grafuri neorientate – parcurgerea in adancime
Grafuri neorientate – Drumuri intr-un graf
Grafuri neorientate – ponderate
Grafuri neorientate – hamiltonian
Grafuri neorientate – euleriene
Grafuri neorientate – implementarea unui graf utilizand matricea de adiacenta
Grafuri neorientate – implementarea unui graf utilizand pointeri
Grafuri neorientate – drumul optim intr-un graf
combinari
Backtracking – combinari
Se citesc 2 numere naturale nenule k,n unde k < n. Să se afişeze toate combinările a k numere din mulţimea (1,2,. ..n}.
#include “stdio.h”
#include “conio.h”
int m,n,a[20];
//funcţia de afişare a soluţiei
void scrie(void)
{
int i;
for(i=0;i < n;i++)
printf("%d ",a[i]+1);
//deoarece lucrăm cu indici de la 0, vom adăuga 1 la valorile rezultate
putchar("\n");
}
//funcţia recursivă de generare a combinărilor
void comb(int k)
{
int i;
//vom încerca să aşezăm pe poziţia curentă, pe rând, toate valorile de la 0 la m-1
for(i=0;i < m;i++)
//încercăm pe poziţia curentă valoarea i
{
a[k]=i;
//dacă este prima valoare aşezată sau dacă ea este mai mare decât
//precedenta putem continua; în caz contrar vom încerca o altă valoare
//a lui i pe poziţia curentă
if((k == 0)||(a[k] > a[k-1]))
if(k == n-1)
//dacă am aşezat n valori (de la 0 la n-1) am ajuns la soluţie
scrie();
else
//dacă nu, apelăm funcţia de aşezare a următoarei poziţii
comb(k+1);
}
}
void main(void)
{
printf(“Introdu pe m:”);
scanf(“%d”,&m);
printf(“Introdu pe n:”);
scanf(“%d”,&n);
//apelăm funcţia recursivă comb încercând să aşezăm primul element
comb(0);
getch();
}