Si potrebbe usare un algoritmo ricorsivo di esplorazione in profondità, del tipo:
Fa un tantino schifo, ma dovrebbe funzionare...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!![]()
![]()

Rispondi quotando