Allora, vediamo un po'.
Per adesso scrivo in pseudo codice la BFS, poi se ho un po' di tempo lo trasformiamo in Java.
codice:
BFS(Grafo G, Node s)
FOR ogni node IN G DO
colore[node]=BIANCO
d[node]=MAX_INT
p[node]=null
colore[s] = GRIGIO
d[s] = 0
Q = {s}
WHILE (!Empty(Q)) DO
head = Head(Q)
FOR node IN ADJ[head] DO
IF(colore[node] == BIANCO)
colore[node] = GRIGIO
d[node] = d[head] + 1
p[node] = head
Q = Q U {node}
colore[head] = NERO
remove(head, Q)
Per rispondere a FinalFantasy, esistono un sacco di algoritmi sui grafi per una miriade di problematiche. Magari se dici qual è il tuo problema posso suggerirti l'algoritmo ad hòc.