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
72
73 typedef std::map<HyperGraph::Vertex*, AdjacencyMapEntry> 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
106
107} // namespace g2o
108#endif
abstract Vertex, your types must derive from that one
std::set< Vertex * > VertexSet
#define G2O_CORE_API
AdjacencyMapEntry(HyperGraph::Vertex *_child=0, HyperGraph::Vertex *_parent=0, HyperGraph::Edge *_edge=0, double _distance=std::numeric_limits< double >::max())
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
virtual double perform(HyperGraph::Vertex *v, HyperGraph::Vertex *vParent, HyperGraph::Edge *e)
HyperGraph * _graph
HyperDijkstra(HyperGraph *g)
HyperGraph * graph()
HyperGraph::VertexSet & visited()
HyperGraph::VertexSet _visited
AdjacencyMap _adjacencyMap
AdjacencyMap & adjacencyMap()
std::map< HyperGraph::Vertex *, AdjacencyMapEntry > AdjacencyMap
virtual double operator()(HyperGraph::Edge *edge, HyperGraph::Vertex *from, HyperGraph::Vertex *to)