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

- Main Page
- Classes
- Files
- Related Pages

# dijkstra.h

    00001 //==========================================================================
    00002 //
    00003 //   dijkstra.h
    00004 //
    00005 //==========================================================================
    00006 // $Id: dijkstra.h,v 1.8 2003/02/25 09:18:19 chris Exp $
    00007
    00008 #ifndef GTL_DIJKSTRA_H
    00009 #define GTL_DIJKSTRA_H
    00010
    00011 #include <GTL/GTL.h>
    00012 #include <GTL/graph.h>
    00013 #include <GTL/node_map.h>
    00014 #include <GTL/edge_map.h>
    00015 #include <GTL/algorithm.h>
    00016
    00017 __GTL_BEGIN_NAMESPACE
    00018
    00029 class GTL_EXTERN dijkstra : public algorithm
    00030 {
    00031 public:
    00035     typedef list<node>::const_iterator shortest_path_node_iterator;
    00036
    00040     typedef list<edge>::const_iterator shortest_path_edge_iterator;
    00041
    00045     enum node_color {white, grey, black};
    00046
    00054     dijkstra();
    00055
    00061     virtual ~dijkstra();
    00062
    00072     void source(const node& n);
    00073
    00083     void target(const node& n);
    00084
    00092     void weights(const edge_map<double>& weight);
    00093
    00105     void store_preds(bool set);
    00106
    00125     virtual int check(graph& G);
    00126
    00141     int run(graph& G);
    00142
    00148     node source() const;
    00149
    00155     node target() const;
    00156
    00164     bool store_preds() const;
    00165
    00173     bool reached(const node& n) const;
    00174
    00182     double distance(const node& n) const;
    00183
    00201     node predecessor_node(const node& n) const;
    00202
    00220     edge predecessor_edge(const node& n) const;
    00221
    00236     shortest_path_node_iterator shortest_path_nodes_begin(const node& dest);
    00237
    00252     shortest_path_node_iterator shortest_path_nodes_end(const node& dest);
    00253
    00268     shortest_path_edge_iterator shortest_path_edges_begin(const node& dest);
    00269
    00284     shortest_path_edge_iterator shortest_path_edges_end(const node& dest);
    00285
    00296     virtual void reset();
    00297 private:
    00304     node s;
    00305
    00312     node t;
    00313
    00320     bool weights_set;
    00321
    00328     bool preds_set;
    00329
    00336     edge_map<double> weight;
    00337
    00345     node_map<edge> pred;
    00346
    00352     node_map<int> mark;
    00353
    00361     node_map<double> dist;
    00362
    00373     node_map<list<node> > shortest_path_node_list;
    00374
    00385     node_map<list<edge> > shortest_path_edge_list;
    00386
    00391     void reset_algorithm();
    00392
    00397     void init(graph& G);
    00398
    00404     void fill_node_list(const node& t);
    00405
    00411     void fill_edge_list(const node& t);
    00412 };
    00413
    00414 __GTL_END_NAMESPACE
    00415
    00416 #endif // GTL_DIJKSTRA_H
    00417
    00418 //--------------------------------------------------------------------------
    00419 //   end of file
    00420 //--------------------------------------------------------------------------

University of Passau - FMI - Theoretical Computer Science

Design © 2002, 2003 Marcus Raitner, University of Passau