lemon/vf2pp.h
changeset 1192 b79ff94e27d9
parent 1191 d9f79b81ef6c
child 1193 3ca508482e4c
equal deleted inserted replaced
4:9be0b00e84c1 5:392bd136f9d6
    22 ///\file
    22 ///\file
    23 ///\brief VF2 Plus Plus algorithm.
    23 ///\brief VF2 Plus Plus algorithm.
    24 
    24 
    25 #include <lemon/core.h>
    25 #include <lemon/core.h>
    26 #include <lemon/concepts/graph.h>
    26 #include <lemon/concepts/graph.h>
    27 #include <lemon/dfs.h>
       
    28 #include <lemon/bfs.h>
       
    29 #include <lemon/bits/vf2_internals.h>
    27 #include <lemon/bits/vf2_internals.h>
    30 
    28 
    31 #include <vector>
    29 #include <vector>
    32 #include <algorithm>
    30 #include <algorithm>
    33 #include <utility>
    31 #include <utility>
    34 
    32 
    35 namespace lemon {
    33 namespace lemon {
    36   namespace bits {
       
    37     namespace vf2pp {
       
    38 
       
    39       template <class G>
       
    40       class DfsLeaveOrder : public DfsVisitor<G> {
       
    41         int i;
       
    42         const G &_g;
       
    43         std::vector<typename G::Node> &_order;
       
    44       public:
       
    45         DfsLeaveOrder(const G &g, std::vector<typename G::Node> &order)
       
    46           : i(countNodes(g)), _g(g), _order(order) {
       
    47         }
       
    48         void leave(const typename G::Node &node) {
       
    49           _order[--i]=node;
       
    50         }
       
    51       };
       
    52 
       
    53       template <class G>
       
    54       class BfsLeaveOrder : public BfsVisitor<G> {
       
    55         int i;
       
    56         const G &_g;
       
    57         std::vector<typename G::Node> &_order;
       
    58       public:
       
    59         BfsLeaveOrder(const G &g, std::vector<typename G::Node> &order) { }
       
    60         void process(const typename G::Node &node) {
       
    61           _order[i++]=node;
       
    62         }
       
    63       };
       
    64     }
       
    65   }
       
    66 
       
    67 
    34 
    68   ///%VF2 Plus Plus algorithm class.
    35   ///%VF2 Plus Plus algorithm class.
    69 
    36 
    70   ///\ingroup graph_isomorphism This class provides an efficient
    37   ///\ingroup graph_isomorphism This class provides an efficient
    71   ///implementation of the %VF2 Plus Plus algorithm
    38   ///implementation of the %VF2 Plus Plus algorithm