Si potrebbe usare un algoritmo ricorsivo di esplorazione in profondità, del tipo:
codice:
Nodo nodoIniziale;  //globale

void esplora(nodo)
{
    if(nodo == nodoIniziale) hai trovato un ciclo
    else
    {
        if(nodo ha adiacenti)
             esplora(ogni adiacente) //ricorsione
        else
            è una foglia, ramo morto
    }
}

nodoIniziale = N;
esplora(nodoIniziale);

Ad esempio, dato un grafo

b - g
|
a - c - f
| /
d - e

avresti
nodoIniziale = a

esplora(a), ha adiacenti
--esplora(b), ha adiacenti
----esplora(g), ramo morto
--esplora(c), ha adiacenti
----esplora(f), ramo morto
----esplora(d), ha adiacenti
------esplora(e), ramo morto
------esplora(a), == nodoIniziale => CICLO!
Fa un tantino schifo, ma dovrebbe funzionare...