Melhor algoritmo para detectar ciclos em um gráfico direcionado

Qual é o algoritmo mais eficiente para detectar todos os ciclos em um gráfico direcionado?

Eu tenho um gráfico direcionado representando uma agenda de trabalhos que precisam ser executados, um trabalho sendo um nó e uma dependência sendo uma aresta. Preciso detectar o caso de erro de um ciclo neste gráfico, levando a dependências cíclicas.