Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

konwersja algorytmu rekurencyjnego na iteracyjny

Ostatnio zmodyfikowano 2018-12-16 11:01
Autor Wiadomość
glix
Temat założony przez niniejszego użytkownika
konwersja algorytmu rekurencyjnego na iteracyjny
» 2018-12-15 23:47:35
Cześć
Potrzebuje zamienić wywołania rekurencyjne w tym algorytmie https://github.com/hellogcc/circuit-finding-algorithm  na iteracyjne
np dla metody
C/C++
Template < int N >
void CircuitFinder < N >::unblock( int U )
{
    Blocked[ U - 1 ] = false;
   
    while( !B[ U - 1 ].empty() ) {
        int W = B[ U - 1 ].front();
        B[ U - 1 ].pop_front();
       
        if( Blocked[ W - 1 ] ) {
            unblock( W );
        }
    }
}
wykorzystałemw tym celu kojejkę
C/C++
template < int N >
void CycleFinder < N >::unblock( int U )
{
   
    _queue < int > q;
    q.push( U );
    while( !q.empty() )
    {
        int Z = q.pop();
        Blocked[ Z - 1 ] = false;
        while( !B[ Z - 1 ].empty() )
        {
            int W = B[ Z - 1 ].top();
            B[ Z - 1 ].pop();
           
            if( Blocked[ W - 1 ] )
            {
                q.push( W );
            }
        }
    }
   
}

Niestety nie mogę sobie poradzić z tą metodą
C/C++
template < int N >
bool CircuitFinder < N >::circuit( int V )
{
    bool F = false;
    Stack.push_back( V );
    Blocked[ V - 1 ] = true;
   
    for( int W: AK[ V - 1 ] ) {
        if( W == S ) {
            output();
            F = true;
        } else if( W > S && !Blocked[ W - 1 ] ) {
            F = circuit( W );
        }
    }
   
    if( F ) {
        unblock( V );
    } else {
        for( int W: AK[ V - 1 ] ) {
            auto IT = std::find( B[ W - 1 ].begin(), B[ W - 1 ].end(), V );
            if( IT == B[ W - 1 ].end() ) {
                B[ W - 1 ].push_back( V );
            }
        }
    }
   
    Stack.pop_back();
    return F;
}
P-173256
pekfos
» 2018-12-16 11:01:39
Stos wywołań zapamiętuje tu wartości zmiennych V, F i aktualny stan pętli. Musisz dodać własny stos na zapamiętywanie tych informacji.
P-173261
« 1 »
  Strona 1 z 1