Definiţia 3.1. Un graf orientat este o pereche de forma 𝐺 = (𝑋, 𝑈) unde X este o mulţime
finită şi 𝑈 = {(𝑥, 𝑦)⁄𝑥 , 𝑦 ∈ 𝑋} ⊂ 𝑋 × 𝑋. Elementele lui X se numesc vârfuri sau noduri ale
lui G, iar perechile (𝑥, 𝑦) se numesc arce ale grafului G: x este extremitatea iniţială (sursă),
y extremitatea finală (destinaţie) pentru arcul (𝑥, 𝑦).
𝑋 = {𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 }
𝑥1
𝑥2
𝑥3 𝑥4
1
Definiţia 3.2. Dacă arcele 𝑎1 , 𝑎2 , … , 𝑎𝑘 ∈ 𝑈 au proprietatea că extremitatea finală a arcului
𝑎𝑗 coincide cu extremitatea iniţială a arcului 𝑎𝑗+1, (∀) 𝑗 ∈ ̅̅̅̅̅̅̅̅̅̅
1, 𝑘 − 1, atunci mulţimea ordonată
𝑑 = {𝑎1 , 𝑎2 , … , 𝑎𝑘 } formează un drum în graful 𝐺 = (𝑋, 𝑈).
{𝑥𝑖1 , 𝑥𝑖2 , … , 𝑥𝑖ℎ } ⊂ 𝑋 pentru care avem proprietatea (𝑥𝑖𝑗 , 𝑥𝑖𝑗+1 ) ∈ 𝑈, (∀) 𝑗 ∈ ̅̅̅̅̅̅̅̅̅̅
1, ℎ − 1 .
Distingem:
Un drum elementar care trece prin toate nodurile grafului se numeşte drum hamiltonian.
Numărul de noduri la care se poate ajunge din nodul 𝑥𝑖 se numeşte puterea de atingere a
nodului 𝑥𝑖 ∈ 𝑋 şi se notează 𝑝(𝑥𝑖 ).
1, 𝑑𝑎𝑐ă (𝑥𝑖 , 𝑥𝑗 ) ∈ 𝑈
𝑎𝑖𝑗 = { , (∀) 𝑖. 𝑗 ∈ ̅̅̅̅̅
1, 𝑛 .
0, 𝑑𝑎𝑐ă (𝑥𝑖 , 𝑥𝑗 ) ∉ 𝑈
2
Pentru exemplul anterior avem:
0 0 1 1
𝐴 = (1 0 0 0)
0 1 0 1
0 0 0 0
Remarcăm faptul că
➢ două grafuri care au aceeaşi mulţime de vârfuri şi aceeaşi matrice a arcelor coincid;
➢ nu este obligatoriu ca două grafuri având aceeaşi mulţime de vârfuri şi aceeaşi matrice
a drumurilor, să aibă şi aceleaşi arce.
+̇ 0 1
0 0 1
1 1 1
3
×̇ 0 1
0 0 0
1 0 1
Algoritm 1.
Observaţie. Dacă ne interesează doar existenţa drumurilor dintre noduri, nu şi numărul lor,
atunci vom folosi înmulţirea şi adunarea booleană.
Algoritm 2.
Pas 2. Pentru fiecare linie i, se adună boolean la aceasta toate liniile j pentru care 𝑎𝑖𝑗 = 1.
Pas 3. Se reia pasul 2 până când, după o aplicare a acestuia, matricea rămâne aceeaşi.
4
Observaţie. Aceşti algoritmi sunt destul de lenţi în ceea ce priveşte aplicarea pe calculator.
Ambele procedee ne arată existenţa sau nu a unui drum între două noduri, eventual ce
lungime are (𝐴𝑘 – existenţa drumurilor de lungime k, dacă s-au folosit operaţiile algebrei
booleene) şi câte sunt de această lungime ( 𝐴𝑘 – numărul drumurilor de lungime k, dacă s-au
folosit operaţiile obişnuite).
Totuşi, în problemele practice cel mai important este să ştim care sunt efectiv aceste drumuri.
1 1 1 1
𝐷 = 𝐴 + 𝐴2 + 𝐴3 = (1 1 1 1)
1 1 1 1
0 0 0 0
5
3.4. Determinarea drumurilor hamiltoniene
Teoremă (Chen) Un graf orientat, fără circuite, cu n noduri conţine un drum hamiltonian
𝑛(𝑛−1)
dacă şi numai dacă ∑𝑛𝑖=1 𝑝(𝑥𝑖 ) = 2
Teoremă
Dacă într-un graf orientat, fără circuite există un drum hamiltonian, atunci acesta este unic.
𝑛(𝑛−1)
Pas 5. Dacă ∑𝑛𝑖=1 𝑝(𝑥𝑖 ) ≠ , atunci graful G nu are drum hamiltonian.
2
𝑛(𝑛−1)
Dacă ∑𝑛𝑖=1 𝑝(𝑥𝑖 ) = , atunci se trece la pasul 6.
2
6
Algoritmul lui Kaufmann (înmulţirii latine)
Pas 2. Din matricea 𝒦 (1) - matricea latină, prin suprimarea primei litere,
Operaţia de concatenare (&) (înmulţire latină) respectă regulile din înmulţirea obişnuită a
matricelor, cu următoarele precizări:
➢ dacă una din componentele participante la calcul este *, atunci rezultatul este *;
𝒦 (𝑚) - conţine lista tuturor drumurilor formate din m arce în graful dat.
În marea majoritate a problemelor care pot fi modelate prin grafuri nu ne interesează numai
dacă există sau nu legături între componentele reprezentate prin nodurile grafului, ci şi
intensitatea acestora. Această intensitate are semnificaţia unei valori numerice (pozitive sau
negative) asociate arcului corespunzător legăturii a cărei intensitate o măsoară.
7
În aplicaţiile economice această valoare poate fi:
➢ lungimea drumului dintre două localităţi;
➢ costul parcurgerii rutei reprezentate prin arcul corespunzător;
➢ durata parcurgerii rutei respective;
➢ cantitatea transportată pe ruta respectivă etc.
Una din problemele care poate apărea în aceste situaţii este găsirea, pentru o anumită pereche
de noduri sau mai multe perechi, a drumului optim între acestea.
care asociază fiecărui arc o valoare reală, să se găsească, pentru o pereche dată de noduri,
drumul (drumurile) de valoare optimă (minimă sau/şi maximă) între cele două noduri şi
valoarea acestuia (acestora).
Din cauza varietăţii nelimitate a grafurilor posibile, nu există un algoritm care să rezolve
orice problemă, în timp util, dar s-au elaborat o mulţime de algoritmi, fiecare fiind cel mai
eficace în anumite cazuri.
8
Algoritmul lui Bellman – Kalaba
Dacă dorim să cunoaştem drumurile de valoare minimă (maximă) între oricare două noduri,
vom aplica algoritmul, pe rând, pentru fiecare nod al grafului.
Presupunem, fără a restrânge generalitatea, că am numerotat nodurile astfel încât nodul spre
care căutăm drumurile de valoare minimă (maximă) de la celelalte noduri să fie 𝑥𝑛 .
9
Pasul 3. După calcularea fiecărei linii noi, se compară elementele ei cu cele ale precedentei:
➢ dacă 𝐿𝑖𝑗 ≠ 𝐿𝑖−1,𝑗 , pentru cel puţin un indice j, se trece la calcularea noii linii 𝐿𝑖+1 .
Observaţie. Pentru grafuri foarte mari, algoritmul necesită un volum mare de memorie, prin
necesitatea memorării matricei M, care este greu de manipulat. Chiar dacă, din cele 𝑛2 arce
posibile, graful ar avea doar un procent foarte mic, matricea grafului va avea tot 𝑛2 poziţii de
memorat şi analizat.
BIBLIOGRAFIE
3. Kaufmann, A., Metode şi modele ale cercetării operaţionale, Vol. II, Editura Tehnică,
Bucureşti, 1967;
4. Nica, V., Ciobanu, Gh., Mustață, F., Mărăcine, V., Cercetări operaționale, Editura
MATRIX ROM, București, 1998, ISBN 973-9254-92-6;
10