Depinde de problema: daca ai sursa unica, poti folosi Dijkstra (cu heap-uri) sau Bellman-Ford (cu coada). Eu il prefer, in general, pe al doilea, pentru simplitate, cu toate ca primul se comporta, teoretic, mai bine.
Daca te intereseaza drumuri minime intre toate perechile de varfuri, folosesti Floyd-Warshall (sau Roy-Floyd, cum mai este numit).
Problema drumurilor minime este foarte bine tratata in
CLR, o carte de care vei avea nevoie, daca te hotarasti sa incepi studiul serios
Iti sugerez, totusi, sa te documentezi putin mai mult inainte de a pune o astfel de intrebare pe forum, sunt pe internet suficiente surse de informare, in care vei gasi pe larg explicatii asupra algoritmului, poate mai complete sau mai usor de inteles decat iti va putea da cineva aici (eforturile lui Bogdan sunt cu adevarat de apreciat
un + de la mine). Abia dupa ce te vei convinge singur "cu ce se mananca" e indicat sa ceri sfaturi legate de anumite particularitati sau aplicatii.