Cuprins Limbajul C

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

Backtracking – aranjamente

Să se genereze toate aranjamentele de n numere luate câte p. Se consideră mulţimea A={1,2,…n} şi un număr natural k, k < n. Se vor genera toate submulţimile mulţimii A care au k elemente, considerând submulţimi distincte cazurile având aceleaşi elemente dar poziţii diferite. Practic este necesară obţinerea tuturor combinărilor de k elemente din mulţimea A, iar pentru fiecare mulţime astfel obţinută se vor genera toate permutările ei.
#include “stdio.h”
int n,st[100],p,i;
//functia care ne va afisa intr-un final sirul
void afiseaza()
{
for(i=0;i < p;i++)   printf("%d", st[i]); } //functia care verifica daca elementele sunt diferite int valid() { for(i=1;i < k;i++)   if(st[i] == st[k])     return 0;   return 1; } void backtracking(int k) {   if(k > p)
    afiseaza();
  else
    for(i=0;i < n;i++)       {       st[k]=i;       if(valid(k))         backtracking(k+1);       } } int main() { printf("Numarul de elemente: "); scanf("%d", n); prinf("Numarul de moduri"); scanf("%d", p); backtracking(1); getch(); }