COIN-OR::LEMON - Graph Library

Ignore:
Timestamp:
04/30/04 18:10:49 (20 years ago)
Author:
marci
Branch:
default
Phase:
public
Convert:
svn:c9d7d8f5-90d6-0310-b91f-818b3a526b0e/lemon/trunk@657
Message:

bipartite graph in bipartite_graph_wrapper.h

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/work/marci/bipartite_graph_wrapper.h

    r496 r497  
    2727  template<typename Graph>
    2828  class BipartiteGraphWrapper : public GraphWrapper<Graph> {
     29  protected:
    2930    typedef IterableBoolMap< typename Graph::template NodeMap<int> >
    3031    SFalseTTrueMap;
    3132    SFalseTTrueMap* s_false_t_true_map;
     33
     34    BipartiteGraphWrapper() : GraphWrapper<Graph>(0) { }
     35    void setSFalseTTrueMap(SFalseTTrueMap& _s_false_t_true_map) {
     36      s_false_t_true_map=_s_false_t_true_map;
     37    }
    3238
    3339  public:
     
    176182    }
    177183  };
     184
     185  ///\bug Do not use this while the bipartitemap augmentation
     186  /// does not work well.
     187  template<typename Graph>
     188  class BipartiteGraph : public BipartiteGraphWrapper<Graph> {
     189    typedef IterableBoolMap< typename Graph::template NodeMap<int> >
     190    SFalseTTrueMap;
     191    typedef BipartiteGraphWrapper<Graph> Parent;
     192  protected:
     193    Graph gr;
     194    typename Graph::template NodeMap<int> bipartite_map;
     195    SFalseTTrueMap s_false_t_true_map;
     196  public:
     197    typedef typename Parent::Node Node;
     198    typedef typename Parent::Edge Edge;
     199    BipartiteGraph() : BipartiteGraphWrapper<Graph>(0),
     200                       gr(), bipartite_map(gr),
     201                       s_false_t_true_map(bipartite_map) {
     202      Parent::setGraph(gr);
     203      Parent::setSFalseTTrueMap(bipartite_map);
     204    }
     205
     206    /// the \c bool parameter which can be \c S_Class or \c T_Class shows
     207    /// the color class where the new node is to be inserted.
     208    void addNode(bool);
     209
     210    /// A new edge is inserted.
     211    ///\pre \c tail have to be in \c S_Class and \c head in \c T_Class.
     212    void addEdge(const Node& tail, const Node& head);
     213
     214    void erase(const Node&);
     215    void erase(const Edge&);
     216   
     217    void clear() {
     218      FOR_EACH_LOC(typename Parent::EdgeIt, e, G) erase(e);
     219      FOR_EACH_LOC(typename Parent::NodeIt, n, G) erase(n);
     220    }
     221  };
     222
    178223
    179224  template<typename Graph>
Note: See TracChangeset for help on using the changeset viewer.