Algoritmul lui Kosaraju pentru găsirea componentelor tare conexe (graf orientat)
Reprezentări pentru grafuri ponderate
Algoritmul lui Dijkstra pentru găsirea celor mai scurte drumuri
Graf orientat:
Componentele tare conexe:
Graf transpus:
Algoritmul lui Kosaraju:
initializăm toate nodurile ca fiind nevizitate
Lansăm parcurgrea în adâncime (DFS) din primul nod nevizitat.
La întoarcerea din recursie (exact ca la SDR postordine, la arbori) punem nodul într-o listă (array).
Continuăm cu următorul nod nevizitat până la epuizarea lor.
Producem graful transpus prin inversarea direcției muchiilor.
initializăm toate nodurile ca fiind nevizitate
Începând cu ultimul nod din listă nevizitat lansăm din nou DFS. Acest DFS va colora o singură componentă tare conexă.
Continuăm cu următorul nod nevizitat până la epuizarea lor.
Corectitudinea este bazată pe următoarele proprietăți:
Componentele tare conexe sunt invariante la transpunerea grafului
Graful componentelor tare conexe este un graf orientat aciclic (directed acyclic graph, DAG)
Pentru a parcurge izolat o componentă conexă, lansăm o parcurgere dintr-o componentă cu grad extern 0, care devine vizitată, o considerăm eliminată din graf, iar apoi continuăm cu restul grafului.
Prima trecere DFS din algoritmul lui Kosaraju produce o ordonare specială a nodurilor cu proprietatea că există un nod roșu care apare după oricare nod verde (fig.2). Dacă este așa, după ce transpunem și rulăm DFS pe ordinea inversă: componenta roșie va fi colorată și vizitată înaintea celei verzi, izolând corect componenta roșie.
Deseori este nevoie să reținem informații în muchii.
Uzual informația este o distanță sau cost necesar pentru a parcurge acea muchie.
Astfel de grafuri se numesc grafuri ponderate (weighted graph).
Este un algoritm care calculează drumurile minime de la un nod al unui graf la toate celelalte noduri din graf.
Functioneaza pe grafuri ponderate cu ponderi pozitive.
Putem să-l folosim pentru a descoperi cel mai scurt drum între două noduri.