1 #ifndef __DIADES__AUTOMATA__FGFS_HH_ 2 #define __DIADES__AUTOMATA__FGFS_HH_ 5 #include <utils/GraphSearch.hh> 24 template<
typename TIncidentEdges,
27 typename TAccumulator,
31 class GFS :
public GraphSearch<TIncidentEdges,TOpposite,TContainer,TAccumulator,
32 TMark,TSolution,TPathCut>
35 typedef GraphSearch<TIncidentEdges,TOpposite,TContainer,TAccumulator,
59 GFS(Graph & graph,
const Container & nodes,
60 const Opposite & opposite, Solution & s,
61 PathCut & cut, Accumulator & results):
62 Search(graph,nodes,opposite,s,cut,results),
142 while(result && (index <
_vnodes.size()))
167 bool isSaturated =
true;
168 typename IncidentEdges::Iterator edgeIt = edges.begin();
169 while(isSaturated && (edgeIt != edges.end()))
216 vector< typename Search::Node > nodes;
218 for(
typename IncidentEdges::Iterator edgeIt = edges.begin();
219 edgeIt != edges.end();
226 nodes.push_back(nextNode);
280 vector< typename Search::Node > visitedNodes;
281 visitedNodes.reserve(nodes.size());
282 vector< typename Search::Node > nonVisitedNodes;
283 nonVisitedNodes.reserve(nodes.size());
290 visitedNodes.push_back(node);
294 nonVisitedNodes.push_back(node);
298 if(!nonVisitedNodes.empty())
301 return nonVisitedNodes[(unsigned) index];
303 if(!visitedNodes.empty())
306 return visitedNodes[(unsigned) index];
309 return nodes[(unsigned) index];
virtual void initialize()
void setVisited(const typename Search::Node &node)
vector< typename Search::Node > _vnodes
TIncidentEdges IncidentEdges
ComposableModelSearch< Diades::Utils::GFS< NextTransitions, TargetDiagState, list< DiagState >, list< DiagState >, VisitedDiagState, IsCandidate, IncorrectPath > > FGFS
void setSaturated(const typename Search::Node &node)
const Opposite & _opposite
GraphSearch< TIncidentEdges, TOpposite, TContainer, TAccumulator, TMark, TSolution, TPathCut > Search
IncidentEdges::Graph Graph
stack< typename Search::Node > _stack
Random generation utilities.
bool saturated(const typename Search::Node &node) const
Namespace of the Diades project.
Search::Container Container
Search::IncidentEdges IncidentEdges
bool visited(const typename Search::Node &node)
void setVisiting(const typename Search::Node &node)
Search::Node pickup(const vector< typename Search::Node > &nodes)
void unsetVisiting(const typename Search::Node &node)
virtual void initialize()
Search::Opposite Opposite
long generateRandomValue(long lower, long upper)
Search::Solution Solution
Search::Accumulator Accumulator
GFS(Graph &graph, const Container &nodes, const Opposite &opposite, Solution &s, PathCut &cut, Accumulator &results)
bool isVisiting(const typename Search::Node &node) const