Matricea de adiacență
Pentru un graf cu noduri, matricea are elemente:
Proprietăți la graf neorientat:
- matricea e simetrică: ;
- diagonala principală e formată din zerouri (fără bucle);
- gradul nodului = suma elementelor de pe linia ;
- 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]:
| 1 | 2 | 3 | 4 | |
|---|---|---|---|---|
| 1 | 0 | 1 | 1 | 0 |
| 2 | 1 | 0 | 1 | 0 |
| 3 | 1 | 1 | 0 | 1 |
| 4 | 0 | 0 | 1 | 0 |
Gradele: , , , . Suma = 8 = 2 × 4 muchii. ✓
Greșeli frecvente
- Se uită simetria și se completează doar jumătate din matrice.
- Se numără muchiile fără să se împartă la 2.
- Se pune 1 pe diagonala principală. Un nod nu e adiacent cu el însuși (fără bucle).
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;
}