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

Grafuri neorientate: terminologie

Nod, muchie, adiacență, incidență, grad, lanț, ciclu, subgraf și graf parțial.

Ce este un graf neorientat

Un graf neorientat G=(V,E)G = (V, E) are o mulțime de noduri (vârfuri) VV și o mulțime de muchii EE. O muchie leagă două noduri și nu are sens: [x,y][x, y] și [y,x][y, x] sunt aceeași muchie.

Terminologia cerută de programă

  • Nod (vârf): element al mulțimii VV.
  • Muchie: pereche neordonată de noduri distincte.
  • Adiacență: două noduri sunt adiacente dacă între ele există muchie.
  • Incidență: o muchie este incidentă cu nodurile pe care le unește.
  • Grad (d(x)d(x)): numărul de muchii incidente cu nodul xx. Un nod cu gradul 0 se numește izolat, cu gradul 1 terminal.
  • Lanț: succesiune de noduri în care oricare două consecutive sunt adiacente.
  • Lanț elementar: lanț în care niciun nod nu se repetă.
  • Ciclu: lanț în care primul nod coincide cu ultimul, cu cel puțin 3 muchii distincte.
  • Ciclu elementar: ciclu în care nu se repetă niciun nod, în afară de primul și ultimul.
  • Lungime: numărul de muchii din lanț sau ciclu, nu numărul de noduri.
  • Subgraf: se obține eliminând noduri și toate muchiile incidente cu ele.
  • Graf parțial: se obține eliminând doar muchii; nodurile rămân toate.

Teorema gradelor

∑x∈Vd(x)=2⋅m\sum_{x \in V} d(x) = 2 \cdot m

Suma gradelor tuturor nodurilor este dublul numărului de muchii, pentru că fiecare muchie contribuie cu 1 la gradul fiecăruia dintre cele două capete.

Consecință: suma gradelor e întotdeauna pară, iar numărul nodurilor de grad impar e par.

Greșeli frecvente

  1. Se numără lungimea în noduri. Se numără în muchii: un lanț cu 4 noduri are lungimea 3.
  2. Se confundă subgraful cu graful parțial.
  3. Se uită că într-un graf neorientat muchia nu are sens, deci matricea de adiacență e simetrică.
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] = a[y][x] = 1;
    }

    int suma = 0, izolate = 0, terminale = 0;
    for (int i = 1; i <= n; i++) {
        int g = 0;
        for (int j = 1; j <= n; j++) g += a[i][j];
        suma += g;
        if (g == 0) izolate++;
        if (g == 1) terminale++;
    }

    cout << "suma gradelor=" << suma << " muchii=" << suma / 2;
    cout << " izolate=" << izolate << " terminale=" << terminale;
    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