Pe scurt
Un graf neorientat este conex dacă între orice două vârfuri există un lanț. În graful 1–2–3, nu există muchie directă între 1 și 3, dar lanțul 1–2–3 le unește, deci graful este conex. Dacă adăugăm un vârf 4 izolat, graful nu mai este conex.
În detaliu
Un graf neorientat este conex dacă între oricare două vârfuri există un lanț. O componentă conexă este un subgraf conex maximal, adică nu mai poate fi extins cu alte vârfuri fără să-și piardă conexitatea. Testul de conexitate pornește dintr-un vârf și marchează toate vârfurile la care ajunge printr-o parcurgere. Pentru un graf cu vârfuri, dacă după parcurgere toate cele poziții sunt marcate, graful este conex.
Exemplul 1 — testul de conexitate. Graful are 4 vârfuri și muchiile , :
#include <iostream>
using namespace std;
int a[5][5] = {}, viz[5] = {}, n = 4;
void df(int u) {
viz[u] = 1;
for (int v = 1; v <= n; ++v)
if (a[u][v] && !viz[v]) df(v);
}
int main() {
a[1][2] = a[2][1] = a[2][3] = a[3][2] = 1;
df(1);
bool conex = true;
for (int i = 1; i <= n; ++i)
if (!viz[i]) conex = false;
cout << conex;
}
Se afișează 0, deoarece vârful 4 este izolat și nu este marcat de parcurgerea pornită din 1. Fără vârful 4, graful 1–2–3 ar fi conex, pentru că 1 și 3 sunt unite prin lanțul 1–2–3, chiar dacă nu există muchia .
Exemplul 2 — numărul componentelor conexe. Se parcurg indicii de la 1 la și se pornește o nouă parcurgere la fiecare vârf încă nemarcat; numărul pornirilor este numărul componentelor:
#include <iostream>
using namespace std;
int a[11][11], viz[11], n, m;
void df(int u) {
viz[u] = 1;
for (int v = 1; v <= n; ++v)
if (a[u][v] && !viz[v]) df(v);
}
int main() {
cin >> n >> m;
for (int i = 0; i < m; ++i) {
int x, y;
cin >> x >> y;
a[x][y] = a[y][x] = 1;
}
int comp = 0;
for (int i = 1; i <= n; ++i)
if (!viz[i]) { ++comp; df(i); }
cout << comp;
}
Pentru intrarea 6 3, 1 2, 2 3, 4 5 se afișează 3: componentele sunt , și . Pentru graful din primul exemplu, parcurgerea din 1 acoperă , iar vârful 4 pornește a doua parcurgere, deci sunt două componente. Parcurgerea cu matrice cere operații, iar cu liste de adiacență .
Dacă la fiecare pornire memorezi în comp[i] numărul parcurgerii care a marcat vârful , două vârfuri sunt unite printr-un lanț dacă și numai dacă au aceeași valoare în comp. Adăugarea unei muchii între două vârfuri din componente diferite reunește componentele, deci numărul lor scade cu 1; adăugarea unei muchii în interiorul unei componente nu îl schimbă. Eliminarea unei muchii fie lasă numărul componentelor neschimbat, fie îl mărește cu 1; o astfel de muchie se numește punte. În lanțul 1–2–3 fiecare muchie este punte, iar în triunghi nicio muchie nu este: după eliminarea oricăreia, graful rămâne conex.
Exemplul 3 — urmărirea parcurgerii. Pentru graful cu și muchiile , , , apelul df(1) marchează vârful 1, apoi găsește vecinul 2 și apelează df(2). Din 2, vecinul 1 este deja marcat, iar vecinul 3 duce la df(3), care nu mai găsește vecini nemarcați. Parcurgerea din 1 se încheie cu viz egal cu 1, 1, 1, 0, 0, 0. Ciclul din main ajunge la , pornește df(4) și marchează vârfurile 4 și 5; la pornește df(6), care marchează doar vârful 6. Contorul comp crește de trei ori, deci graful are 3 componente. Dacă se adaugă muchia , parcurgerea din 1 ajunge și la 4 și 5, iar rămân două componente: și . Pentru graful inițial, vectorul comp este 1, 1, 1, 2, 2, 3 și arată direct că vârfurile 1 și 3 sunt unite printr-un lanț, iar vârfurile 3 și 4 nu sunt.
Pentru admitere
Un graf simplu conex cu vârfuri are cel puțin muchii; un arbore atinge această limită. Condiția este necesară, dar nu suficientă pentru conexitate: pot exista multe muchii într-o componentă și un vârf izolat. Mai general, un graf cu vârfuri și componente conexe are cel puțin muchii, deoarece fiecare componentă cu vârfuri are cel puțin muchii, iar suma este . Pentru a uni componente într-un graf conex sunt suficiente muchii noi, câte una între componente diferite. Un graf cu vârfuri și mai mult de muchii este sigur conex; limita se atinge când are un vârf izolat alături.
Exemplu în formatul examenului. Un graf neorientat are 7 vârfuri și 3 componente conexe, cu 3, 2 și 2 vârfuri. Care este numărul minim de muchii pe care le poate avea?
- a) 3
- b) 4
- c) 6
- d) 7
Răspunsul corect este b). Componenta cu 3 vârfuri are cel puțin 2 muchii, iar fiecare componentă cu 2 vârfuri are cel puțin 1, deci minimul este . Varianta a) este numărul componentelor. Varianta c) este , limita pentru un graf conex cu 7 vârfuri, iar graful dat nu este conex. Varianta d) este numărul vârfurilor.
Greșeli frecvente
- Greșit: conex înseamnă că orice pereche are muchie directă.Corect: este suficient un lanț.
- Greșit: un vârf izolat poate aparține unui graf conex cu mai multe vârfuri.Corect: un vârf izolat face graful neconex.
- Greșit: garantează conexitatea.Corect: este doar o condiție necesară.
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)
