diff --git a/alib2algo/src/automaton/properties/ReachableStates.h b/alib2algo/src/automaton/properties/ReachableStates.h index 452a2f094263738e9b48344667f39efd0b07c44a..b3591c905f25fbf1ec261441027baa52fc14b03b 100644 --- a/alib2algo/src/automaton/properties/ReachableStates.h +++ b/alib2algo/src/automaton/properties/ReachableStates.h @@ -161,21 +161,19 @@ ext::set<StateType> ReachableStates::reachableStates( const automaton::DFTA < Sy ext::deque<ext::set<StateType>> Qi; Qi.push_back( ext::set<StateType>( ) ); - int i = 1; + int i = 0; // 1bc - while( true ) { - Qi.push_back( Qi.at( i - 1 ) ); + do { + i = i + 1; + + Qi.push_back( Qi.at( i - 1) ); for( const auto & transition : fta.getTransitions ( ) ) if ( std::all_of ( transition.first.second.begin ( ), transition.first.second.end ( ), [ & ] ( const StateType & state ) { return Qi.at ( i - 1 ).count ( state ); } ) ) Qi.at( i ).insert ( transition.second ); - if( Qi.at( i ) == Qi.at( i - 1 ) ) - break; - - i = i + 1; - } + } while ( Qi.at( i ) != Qi.at( i - 1 ) ); return Qi.at( i ); } @@ -186,21 +184,19 @@ ext::set<StateType> ReachableStates::reachableStates( const automaton::NFTA < Sy ext::deque<ext::set<StateType>> Qi; Qi.push_back( ext::set<StateType>( ) ); - int i = 1; + int i = 0; // 1bc - while( true ) { - Qi.push_back( Qi.at( i - 1 ) ); + do { + i = i + 1; + + Qi.push_back( Qi.at( i - 1) ); for( const auto & transition : fta.getTransitions ( ) ) if ( std::all_of ( transition.first.second.begin ( ), transition.first.second.end ( ), [ & ] ( const StateType & state ) { return Qi.at ( i - 1 ).count ( state ); } ) ) Qi.at( i ).insert ( transition.second ); - if( Qi.at( i ) == Qi.at( i - 1 ) ) - break; - - i = i + 1; - } + } while ( Qi.at( i ) != Qi.at( i - 1 ) ); return Qi.at( i ); } diff --git a/alib2algo/src/automaton/properties/UsefulStates.h b/alib2algo/src/automaton/properties/UsefulStates.h index da3610dac3203a005aa980647de15d1f89fcbe6f..6d40b0a874a8e9e2aacbf172bcd49e382ee4a176 100644 --- a/alib2algo/src/automaton/properties/UsefulStates.h +++ b/alib2algo/src/automaton/properties/UsefulStates.h @@ -122,20 +122,19 @@ ext::set<StateType> UsefulStates::usefulStates( const automaton::DFTA < SymbolTy Qi.push_back( ext::set<StateType>( ) ); Qi.at( 0 ) = fta.getFinalStates( ); - int i = 1; + int i = 0; // 1bc - while( true ) { + do { + i = i + 1; + Qi.push_back( Qi.at( i - 1 ) ); // copy Qi-1 into Qi for( const auto & p : Qi.at( i - 1 ) ) for( const auto & t : fta.getTransitionsToState ( p ) ) Qi.at( i ).insert( t.first.second.begin ( ), t.first.second.end ( ) ); - if( Qi.at( i ) == Qi.at( i - 1 ) ) - break; + } while ( Qi.at( i ) != Qi.at( i - 1 ) ); - i = i + 1; - } return Qi.at( i ); } @@ -146,20 +145,19 @@ ext::set<StateType> UsefulStates::usefulStates( const automaton::NFTA < SymbolTy Qi.push_back( ext::set<StateType>( ) ); Qi.at( 0 ) = fta.getFinalStates( ); - int i = 1; + int i = 0; // 1bc - while( true ) { + do { + i = i + 1; + Qi.push_back( Qi.at( i - 1 ) ); // copy Qi-1 into Qi for( const auto & p : Qi.at( i - 1 ) ) for( const auto & t : fta.getTransitionsToState ( p ) ) Qi.at( i ).insert( t.first.second.begin ( ), t.first.second.end ( ) ); - if( Qi.at( i ) == Qi.at( i - 1 ) ) - break; + } while ( Qi.at( i ) != Qi.at( i - 1 ) ); - i = i + 1; - } return Qi.at( i ); }