Witam
To może zacznę od polecenia. Mam wykonać coś takiego:

Zaimplementuj algorytm Fleury'ego AE znajdujący (a) jeden (pierwszy znaleziony) cykl Eulera, (b) wszystkie cykle Eulera w grafie nieskierowanym.

Należy zaimplementować algorytm, z dwoma warunkami stopu przekazywanymi jako parametr wejściowy (stop po znalezieniu pierwszego cyklu / stop po znalezieniu wszystkich cykli). Można wybrać dowolną reprezentację maszynową grafu.

I napisałem programm który znajduje 1 cykl i nie mam pomysłu jak napisać ten b) czyli żeby znajdował wszystkie cykle. Jesli ktoś ma jakiś pomysł jak ten algorytm ma wyglądać będę bardzo wdzięczny za wszelkie wskazówki. Poniżej zamieszczam kod dla algorytmu wyszukującego 1 cykl.

#include <iostream>
#include <list>

using namespace std;

list <int> q;

void DFS(int v, int visited[], list <int> L[]) //Potrzebna tylko do sprawdzanie czy graf jest Eulerowski
{
    visited[v] = true;
    for(list<int>::iterator i = L[v].begin(); i != L[v].end(); i++)
    if(!visited[*i]) DFS(*i,visited,L);
}


bool sprawdzanie(int n, int visited[], list <int> L[]) //Sprawdzanie czy graf jest Eulerowski
{
    int s=0;
    bool test=true;
    for(int i=1; i<=n; i++) visited[i]=false;
    for(int i=1; i<=n; i++)
    {
        if(L[i].size()%2)
        {
            test=false;
            return test;
        }
        if(!visited[i])
        {
            s++;
            DFS(i,visited,L);
        }
    }
    if(s!=1) test=false;
    return test;
}


void Euler(int v, list <int> L[]) //Rekurencyjne wyszukiwanie cyklu Eulera
{
    while(!L[v].empty())
    {
        int x = L[v].front();
        L[v].pop_front();
        for(list<int>::iterator i = L[x].begin(); i != L[x].end(); i++)
        if((* i) == v)
        {
            L[x].erase(i); break;
        }
        Euler(x,L);
    }
    q.push_front(v);
}



main()
{
    int n,m;
    cin >> n >> m;

    list <int> L[n+1];
    int visited[n+1];

    for(int i = 1; i <= m; i++)
    {
        int v,w;
        cin >> v >> w;
        L[v].push_back(w);
        L[w].push_back(v);
    }

    if (sprawdzanie(n,visited,L))
    {
        q.clear();
        Euler(1,L);
        for(list<int>::iterator i = q.begin(); i != q.end(); i++)
        cout << (* i) << " ";
    }
    else cout << "Graf nie ma cykli Eulera";
}

P.S. Graf jest reprezentowany za pomocą list incydencji