Didaxis
lecție · Informatică

Tare conexitate

Componente tare conexe în graf orientat.

Se face în:
Clasa a XI-a
Actualizat la: 30 octombrie 2026
1pe scurtstratul 1 din 3 · rezumatul lecției

Pe scurt

Un graf orientat este tare conex dacă pentru orice pereche de vârfuri există drum orientat în ambele sensuri. Arcele 1→2, 2→3, 3→1 formează un ciclu orientat și dau un graf tare conex. Dacă eliminăm 3→1, putem merge de la 1 la 3, dar nu înapoi, deci proprietatea dispare.

Desen la lecția „Tare conexitate”
2în detaliustratul 2 din 3 · pentru clasă și Bacalaureat

În detaliu

Un graf orientat este tare conex dacă pentru orice pereche de vârfuri și există drum orientat de la la și drum orientat de la la . O componentă tare conexă este o mulțime maximală de vârfuri care se pot atinge reciproc prin drumuri orientate. Componenta tare conexă a unui vârf este intersecția dintre mulțimea vârfurilor la care se poate ajunge din (succesorii) și mulțimea vârfurilor din care se poate ajunge la (predecesorii). Prima mulțime se obține prin parcurgerea grafului, a doua prin parcurgerea grafului cu toate arcele inversate, adică folosind transpusa matricei de adiacență.

Exemplul 1 — testul de tare conexitate. Un graf este tare conex dacă, pornind din vârful 1, parcurgerea în graful dat și parcurgerea în graful cu arcele inversate ating toate vârfurile. Este suficient un singur vârf de start, fiindcă, dacă toate vârfurile sunt atinse din 1 și 1 este atins din toate, orice pereche se unește printr-un drum care trece prin 1.

#include <iostream>
using namespace std;
int a[11][11], n, m;
int v1[11], v2[11];
void df(int u, int viz[], bool inv) {
    viz[u] = 1;
    for (int v = 1; v <= n; ++v)
        if ((inv ? a[v][u] : a[u][v]) && !viz[v]) df(v, viz, inv);
}
int main() {
    cin >> n >> m;
    for (int i = 0; i < m; ++i) {
        int x, y;
        cin >> x >> y;
        a[x][y] = 1;
    }
    df(1, v1, false);
    df(1, v2, true);
    bool tare = true;
    for (int i = 1; i <= n; ++i)
        if (!v1[i] || !v2[i]) tare = false;
    cout << (tare ? "tare conex" : "nu");
}

Pentru 3 3 cu arcele , , se afișează tare conex: din 1 se ajunge la 2 și 3, iar în graful inversat se ajunge la 3 și 2. Pentru 3 2 cu arcele , se afișează nu: din 1 se ajunge la toate vârfurile, dar în graful cu arcele inversate nu se ajunge la 2 și 3, deci nu există drum înapoi la 1.

Exemplul 2 — componentele tare conexe. Se repetă calculul intersecției pentru fiecare vârf încă neatribuit unei componente:

#include <iostream>
using namespace std;
int a[11][11], n, m, comp[11];
void df(int u, int viz[], bool inv) {
    viz[u] = 1;
    for (int v = 1; v <= n; ++v)
        if ((inv ? a[v][u] : a[u][v]) && !viz[v]) df(v, viz, inv);
}
int main() {
    cin >> n >> m;
    for (int i = 0; i < m; ++i) {
        int x, y;
        cin >> x >> y;
        a[x][y] = 1;
    }
    for (int x = 1; x <= n; ++x) {
        if (comp[x]) continue;
        int s[11] = {}, p[11] = {};
        df(x, s, false);
        df(x, p, true);
        for (int i = 1; i <= n; ++i)
            if (s[i] && p[i]) { comp[i] = x; cout << i << " "; }
        cout << "| ";
    }
}

Pentru 5 6 cu arcele , , , , , se afișează 1 2 3 | 4 5 |. Din 1 se ajunge la toate vârfurile, dar la 1 se ajunge numai din ; intersecția este . Vârful 4 formează cu 5 a doua componentă, pentru că și . Arcul merge dintr-o componentă în alta, dar nu există drum înapoi. Pentru arcele , , , vârfurile 1 și 2 formează o componentă, iar 3 una separată. Fiecare vârf aparține exact unei componente.

Exemplul 3 — urmărirea calculului pe șase vârfuri. Graful are arcele , , , , , și . Pentru , succesorii sunt , iar predecesorii sunt , deoarece la 1 se ajunge numai din 2 și din el însuși; intersecția este . Primul vârf neatribuit este 3: succesorii lui sunt , predecesorii , deci componenta este , circuitul . Rămâne vârful 6, care are succesorii și toți ceilalți ca predecesori; componenta lui este . Graful are trei componente. Arcele dintre ele, și , merg numai de la spre și de la spre , deci componentele nu formează niciun circuit. Cu matrice de adiacență, fiecare parcurgere cere operații.

3pentru admiterestratul 3 din 3 · pentru examene

Pentru admitere

Nu confunda tare conexitatea cu proprietatea că graful neorientat obținut prin ignorarea sensurilor este conex. Ultima este mai slabă: arcele și dau un graf conex dacă ignori sensurile, dar nu un graf tare conex. Pentru un graf tare conex cu cel puțin două vârfuri, fiecare vârf trebuie să aibă grad intern și extern pozitiv; condiția este necesară, dar nu suficientă, fiindcă în graful cu arcele , , , toate gradele sunt pozitive, dar nu există drum de la 1 la 3. Un graf cu vârfuri care este tare conex are cel puțin arce, iar cele arce ale unui circuit care trece prin toate vârfurile sunt suficiente. Între componentele tare conexe, drumurile merg într-un singur sens: dacă se poate trece din componenta A în B, nu se poate trece și din B în A.

Exemplu în formatul examenului. Un graf orientat are vârfurile 1, 2, 3, 4, 5 și arcele , , , , , . Câte componente tare conexe are?

  • a) 1
  • b) 2
  • c) 3
  • d) 5

Răspunsul corect este b). Vârfurile 1, 2, 3 formează circuitul , deci se ating reciproc. Vârfurile 4 și 5 se ating reciproc prin arcele și . Arcul duce dintr-o componentă în cealaltă, dar nu există drum de la 4 sau 5 înapoi la 1, 2 sau 3. Varianta a) ar corespunde unui graf tare conex, iar aici graful este doar conex dacă ignori sensurile. Varianta c) ar presupune că vârfurile 4 și 5 nu se ating reciproc, iar d) ar presupune că fiecare vârf este singur în componenta lui.

Greșeli frecvente

  • Greșit: un drum de la 1 la 3 garantează și drum de la 3 la 1.
    Corect: sensul arcelor poate împiedica întoarcerea.
  • Greșit: ignorarea sensurilor păstrează testul de tare conexitate.
    Corect: verifică drumuri orientate în ambele sensuri.
  • Greșit: un singur vârf accesibil din toate celelalte face graful tare conex.
    Corect: fiecare pereche trebuie conectată reciproc.
în contul tăuPremium

Testează-te pe această lecție

Lecția o citești aici, fără cont. Testele pe lecții și capitole sunt în cont, cu grile originale Didaxis și explicația fiecăreia: gratuit 10 grile pe zi, fără limită cu Premium, 49 de lei pe lună pentru fiecare copil.

Înainte și după

Surse și referințe

Redactare proprie, conform programei:

  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI intensiv; rocnee.eu
  • OMECI 5099/2009, anexa 5, Informatică, p. 4–5, clasa XI; plan de încadrare: OMEC 7723/2024, anexa 2, tabelele 1–25, legislatie.just.ro; filiera tehnologică: OMEC 7724/2024, anexa 4, tabelul calificării, legislatie.just.ro
  • UNSTPB, Regulament admitere licență 2026, Anexa II-1.2 p. Anx II-14 și Anexa XI-3 p. Anx XI-6–7 (PDF p. 64, 120–121); admitere.pub.ro
  • OMECTS 4800/2010, anexa 2, Informatică, p. 3–4; edu.ro

Documente consultate

  • UNSTPB, admitere 2026, anexa XI-3, p. Anx XI-6–7
  • Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE, p. 4–5; rocnee.eu
  • Programa de bacalaureat la informatică, matematică-informatică (anexa 2 la OMECTS 4800/2010), Ministerul Educației, p. 5–6; edu.ro
  • Subiectele și baremele Bacalaureatului 2026; subiecte2026.edu.ro

Desene: Redactare proprie (desen original), conform Programa școlară de informatică, clasa a XI-a (OMECI 5099/2009, anexa 5), CNCE; rocnee.eu

lecțiile sunt gratuite

Ai citit lecția. Acum verifică-te.