g2o
Loading...
Searching...
No Matches
hyper_dijkstra.h
Go to the documentation of this file.
1// g2o - General Graph Optimization
2// Copyright (C) 2011 R. Kuemmerle, G. Grisetti, W. Burgard
3// All rights reserved.
4//
5// Redistribution and use in source and binary forms, with or without
6// modification, are permitted provided that the following conditions are
7// met:
8//
9// * Redistributions of source code must retain the above copyright notice,
10// this list of conditions and the following disclaimer.
11// * Redistributions in binary form must reproduce the above copyright
12// notice, this list of conditions and the following disclaimer in the
13// documentation and/or other materials provided with the distribution.
14//
15// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
16// IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17// TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
18// PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
19// HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
20// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
21// TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
23// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
24// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27#ifndef G2O_AIS_GENERAL_DIJKSTRA_HH
28#define G2O_AIS_GENERAL_DIJKSTRA_HH
29
30#include <limits>
31#include <map>
32#include <set>
33
34#include "hyper_graph.h"
35
36namespace g2o {
37
41 HyperGraph::Vertex* to) = 0;
42 virtual ~CostFunction() {}
43 };
44
46 virtual double perform(HyperGraph::Vertex* v, HyperGraph::Vertex* vParent,
48 virtual double perform(HyperGraph::Vertex* v, HyperGraph::Vertex* vParent,
49 HyperGraph::Edge* e, double distance);
50 };
51
53 friend struct HyperDijkstra;
55 HyperGraph::Vertex* _parent = 0,
56 HyperGraph::Edge* _edge = 0,
57 double _distance = std::numeric_limits<double>::max());
58 HyperGraph::Vertex* child() const { return _child; }
59 HyperGraph::Vertex* parent() const { return _parent; }
60 HyperGraph::Edge* edge() const { return _edge; }
61 double distance() const { return _distance; }
62 HyperGraph::VertexSet& children() { return _children; }
63 const HyperGraph::VertexSet& children() const { return _children; }
64
65 protected:
69 double _distance;
71 };
72
73 typedef std::map<HyperGraph::Vertex*, AdjacencyMapEntry> AdjacencyMap;
75 HyperGraph::VertexSet& visited() { return _visited; }
76 AdjacencyMap& adjacencyMap() { return _adjacencyMap; }
77 HyperGraph* graph() { return _graph; }
78
79 void shortestPaths(HyperGraph::Vertex* v, HyperDijkstra::CostFunction* cost,
80 double maxDistance = std::numeric_limits<double>::max(),
81 double comparisonConditioner = 1e-3, bool directed = false,
82 double maxEdgeCost = std::numeric_limits<double>::max());
83
84 void shortestPaths(HyperGraph::VertexSet& vset,
86 double maxDistance = std::numeric_limits<double>::max(),
87 double comparisonConditioner = 1e-3, bool directed = false,
88 double maxEdgeCost = std::numeric_limits<double>::max());
89
90 static void computeTree(AdjacencyMap& amap);
91 static void visitAdjacencyMap(AdjacencyMap& amap, TreeAction* action,
92 bool useDistance = false);
93
94 protected:
95 void reset();
96
100};
101
103 virtual double operator()(HyperGraph::Edge* edge, HyperGraph::Vertex* from,
105};
106
107} // namespace g2o
108#endif
abstract Vertex, your types must derive from that one
std::set< Vertex * > VertexSet
#define G2O_CORE_API
HyperGraph::Edge * edge() const
const HyperGraph::VertexSet & children() const
HyperGraph::VertexSet & children()
HyperGraph::Vertex * child() const
HyperGraph::Vertex * parent() const
virtual double operator()(HyperGraph::Edge *e, HyperGraph::Vertex *from, HyperGraph::Vertex *to)=0
HyperGraph * _graph
HyperGraph * graph()
HyperGraph::VertexSet & visited()
HyperGraph::VertexSet _visited
AdjacencyMap _adjacencyMap
AdjacencyMap & adjacencyMap()
std::map< HyperGraph::Vertex *, AdjacencyMapEntry > AdjacencyMap