BFS idzie warstwami i znajduje najkrótszą ścieżkę w grafie nieważonym. DFS schodzi w głąb i jest wygodny do przeglądania, wykrywania cykli i problemów typu topologicznego.
function bfs(start: number, graph: number[][]) {
const q: number[] = [start];
const seen = new Set<number>([start]);
while (q.length) {
const v = q.shift()!;
for (const n of graph[v]) {
if (!seen.has(n)) {
seen.add(n);
q.push(n);
}
}
}
}