Sari la conținut
LECȚIA 16.3 · INFORMATICĂ

Reprezentarea grafurilor: matrice și liste de adiacență

Matricea de adiacență, listele de adiacență și calculul gradelor, în 4 limbaje.

Matricea de adiacență

Pentru un graf cu nn noduri, matricea aa are n×nn \times n elemente:

a[i][j]={1,daca˘ exista˘ muchie ıˆntre i și j0,altfela[i][j] = \begin{cases} 1, & \text{dacă există muchie între } i \text{ și } j \\ 0, & \text{altfel} \end{cases}

Proprietăți la graf neorientat:

  • matricea e simetrică: a[i][j]=a[j][i]a[i][j] = a[j][i];
  • diagonala principală e formată din zerouri (fără bucle);
  • gradul nodului ii = suma elementelor de pe linia ii;
  • numărul de muchii = suma tuturor elementelor, împărțită la 2.

Listele de adiacență

Pentru fiecare nod se reține lista vecinilor lui. Ocupă mai puțină memorie când graful are puține muchii (graf rar).

Exemplu rezolvat

Graf cu 4 noduri și muchiile [1,2], [1,3], [2,3], [3,4]:

1234
10110
21010
31101
40010

Gradele: d(1)=2d(1)=2, d(2)=2d(2)=2, d(3)=3d(3)=3, d(4)=1d(4)=1. Suma = 8 = 2 × 4 muchii. ✓

Greșeli frecvente

  1. Se uită simetria și se completează doar jumătate din matrice.
  2. Se numără muchiile fără să se împartă la 2.
  3. Se pune 1 pe diagonala principală. Un nod nu e adiacent cu el însuși (fără bucle).
EXEMPLU, ÎN 4 LIMBAJE

Alege limbajul în care dai examenul. Poți edita codul și îl poți rula direct aici. Programa oficiala de BAC (proba E.d) cere Pascal sau C/C++, la alegere. Python apare in manualele noi si e pus aici pentru inteles, nu ca limbaj de examen.

#include <iostream>
using namespace std;

int main() {
    int n, m, a[101][101] = {0};
    cin >> n >> m;
    for (int k = 0; k < m; k++) {
        int x, y;
        cin >> x >> y;
        a[x][y] = 1;
        a[y][x] = 1;
    }
    for (int i = 1; i <= n; i++) {
        int grad = 0;
        for (int j = 1; j <= n; j++) grad += a[i][j];
        cout << "d(" << i << ")=" << grad << " ";
    }
    return 0;
}
se trimit programului la citire
EXPLOREAZĂ INTERACTIV

Apasă un nod, apoi altul, ca să adaugi sau să scoți muchia dintre ele.

012345
Noduri6
Muchii5
Suma gradelor10
Componente conexe2
Conexnu
Completnu

Suma gradelor e 10, adică dublul celor 5 muchii. Nu e o coincidență: fiecare muchie adaugă câte 1 la gradul ambelor capete.

012345
0010100
1101000
2010100
3101000
4000001
5000010