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

Grafuri orientate

Arc, grad intern și extern, drum, circuit și tare conexitate.

Ce se schimbă față de graful neorientat

Într-un graf orientat, legătura dintre noduri are sens. Se numește arc și se notează (x,y)(x, y), cu xx extremitate inițială și yy extremitate finală.

(x,y)(x, y) și (y,x)(y, x) sunt arce diferite.

Terminologie

  • Grad extern d+(x)d^+(x): numărul de arce care pleacă din xx.
  • Grad intern d−(x)d^-(x): numărul de arce care intră în xx.
  • Drum: succesiune de noduri în care fiecare arc respectă sensul.
  • Drum elementar: drum fără noduri repetate.
  • Circuit: drum în care primul nod coincide cu ultimul.
  • Circuit elementar: circuit fără noduri repetate, în afară de primul și ultimul.
  • Lungime: numărul de arce.
  • Subgraf și graf parțial: la fel ca la neorientat (scoți noduri, respectiv doar arce).

Teorema gradelor

∑x∈Vd+(x)=∑x∈Vd−(x)=m\sum_{x \in V} d^+(x) = \sum_{x \in V} d^-(x) = m

Suma gradelor externe egalează suma gradelor interne și amândouă dau numărul de arce. Fiecare arc pleacă exact dintr-un nod și intră exact în altul.

Tare conexitate

Un graf orientat e tare conex dacă între oricare două noduri xx și yy există drum de la xx la yy și drum de la yy la xx.

O componentă tare conexă e un subgraf tare conex maximal.

Matricea de adiacență

a[i][j]=1 daca˘ exista˘ arcul (i,j)a[i][j] = 1 \text{ dacă există arcul } (i, j)

Nu mai e simetrică. De aceea:

  • gradul extern al nodului ii = suma de pe linia ii;
  • gradul intern al nodului ii = suma de pe coloana ii;
  • numărul de arce = suma tuturor elementelor, fără să se împartă la 2.

Greșeli frecvente

  1. Se împarte la 2 numărul de arce.
  2. Se confundă gradul intern cu cel extern. Linie = extern (pleacă), coloană = intern (intră).
  3. Se confundă conexitatea (pe graf neorientat) cu tare conexitatea (pe orientat).
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;
    }
    for (int i = 1; i <= n; i++) {
        int ext = 0, intern = 0;
        for (int j = 1; j <= n; j++) {
            ext += a[i][j];
            intern += a[j][i];
        }
        cout << i << ": d+=" << ext << " d-=" << intern << "\n";
    }
    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