Home | Documentation | Download | Platforms | Projects | Mailing Lists | Version History

- Main Page
- Classes
- Files
- Related Pages

# biconnectivity.h

    00001 //==========================================================================
    00002 //
    00003 //   biconnectivity.h
    00004 //
    00005 //==========================================================================
    00006 // $Id: biconnectivity.h,v 1.18 2003/03/26 13:37:14 raitner Exp $
    00007
    00008 #ifndef GTL_BICONNECTIVITY_H
    00009 #define GTL_BICONNECTIVITY_H
    00010
    00011 #include <GTL/GTL.h>
    00012 #include <GTL/dfs.h>
    00013
    00014 #include <list>
    00015 #include <stack>
    00016
    00017 __GTL_BEGIN_NAMESPACE
    00018
    00035 class GTL_EXTERN biconnectivity : public dfs
    00036 {
    00037 public:
    00043     biconnectivity ();
    00044
    00050     virtual ~biconnectivity () {}
    00051
    00065     virtual int check (graph& G);
    00066
    00067     virtual void reset ();
    00068
    00075     int low_number (const node& n) const
    00076         {return low_num[n];}
    00077
    00083     bool is_biconnected () const
    00084         {return num_of_components == 1;}
    00085
    00092     bool store_components () const
    00093         { return store_comp; }
    00094
    00105     void store_components (bool set)
    00106         { store_comp  = set; if (set) scan_whole_graph (set); }
    00107
    00119     void make_biconnected (bool set)
    00120         { add_edges = set; if (set) scan_whole_graph (set); }
    00121
    00129     bool make_biconnected () const
    00130         { return add_edges; }
    00131
    00138     list<edge>::iterator additional_begin ()
    00139         { return additional.begin (); }
    00140
    00147     list<edge>::iterator additional_end ()
    00148         { return additional.end (); }
    00149
    00153     typedef list<node>::iterator cutpoint_iterator;
    00154
    00164     cutpoint_iterator cut_points_begin ()
    00165         { return cut_points.begin(); }
    00166
    00173     cutpoint_iterator cut_points_end ()
    00174         { return cut_points.end(); }
    00175
    00176
    00180     typedef list<pair<list<node>, list<edge> > >::iterator component_iterator;
    00181
    00195     component_iterator components_begin ()
    00196         { return components.begin(); }
    00197
    00198
    00205     component_iterator components_end ()
    00206         { return components.end(); }
    00207
    00213     int number_of_components () const
    00214         {return num_of_components; }
    00215
    00216     //-----------------------------------------------------------------------
    00217     //   Handler used to extend dfs to biconnectivity
    00218     //-----------------------------------------------------------------------
    00222     virtual void init_handler (graph&);
    00223
    00227     virtual void entry_handler (graph&, node&, node&);
    00228
    00232     virtual void before_recursive_call_handler (graph&, edge&, node&);
    00233
    00237     virtual void after_recursive_call_handler (graph&, edge&, node&);
    00238
    00242     virtual void old_adj_node_handler (graph&, edge&, node&);
    00243
    00247     virtual void new_start_handler (graph&, node&);
    00248
    00252     virtual void leave_handler (graph&, node&, node&);
    00253
    00257     virtual void end_handler (graph&);
    00258
    00259
    00260 protected:
    00264     list<edge> self_loops;
    00265
    00269     node_map<component_iterator> in_component;
    00270
    00274     node_map<int> low_num;
    00278     int num_of_components;
    00282     bool store_comp;
    00286     bool add_edges;
    00290     node last;
    00294     stack<node> node_stack;
    00298     stack<edge> edge_stack;
    00302     list<pair<list<node>, list<edge> > > components;
    00306     list<node> cut_points;
    00310     node_map<int> cut_count;
    00314     list<edge> additional;
    00318     node_map<node> first_child;
    00319 };
    00320
    00321 __GTL_END_NAMESPACE
    00322
    00323 #endif // GTL_BICONNECTIVITY_H
    00324
    00325 //--------------------------------------------------------------------------
    00326 //   end of file
    00327 //--------------------------------------------------------------------------

University of Passau - FMI - Theoretical Computer Science

Design © 2002, 2003 Marcus Raitner, University of Passau