27 #include <tulip/tuliphash.h>
29 #include <tulip/Graph.h>
30 #include <tulip/BooleanProperty.h>
31 #include <tulip/StaticProperty.h>
32 #include <tulip/MutableContainer.h>
33 #include <tulip/GraphTools.h>
40 Dijkstra(
const Graph *
const graph, node src,
const EdgeStaticProperty<double> &weights,
41 NodeStaticProperty<double> &nodeDistance, EDGE_TYPE direction,
42 std::stack<node> *qN =
nullptr, MutableContainer<int> *nP =
nullptr);
44 bool searchPaths(node n, BooleanProperty *result);
46 bool searchPath(node n, BooleanProperty *result);
48 bool ancestors(tlp_hash_map<node, std::list<node>> &result);
51 void internalSearchPaths(node n, BooleanProperty *result);
53 struct DijkstraElement {
54 DijkstraElement(
const double dist = DBL_MAX,
const node previous = node(),
55 const node n = node())
56 : dist(dist), previous(previous), n(n) {}
57 bool operator==(
const DijkstraElement &b)
const {
60 bool operator!=(
const DijkstraElement &b)
const {
66 std::vector<edge> usedEdge;
69 struct LessDijkstraElement {
70 bool operator()(
const DijkstraElement *
const a,
const DijkstraElement *
const b)
const {
71 if (fabs(a->dist - b->dist) > 1.E-9) {
72 return (a->dist < b->dist);
74 return (a->n.id < b->n.id);
81 MutableContainer<bool> usedEdges;
82 NodeStaticProperty<double> &nodeDistance;
83 std::stack<node> *queueNodes;
84 MutableContainer<int> *numberOfPaths;