Boost logo

Boost Users :

Subject: Re: [Boost-users] BGL, shortest path between two nearby nodes in a huge graph
From: alex (alexhighviz_at_[hidden])
Date: 2016-01-21 04:06:46


> Dear list,
>
> I am a happy user of BGL, but recently I got stuck in a strange problem. I
think I
> am missing the obvious, so I'll be happy to read the fine manual if it's
the case.
> Just point me to the right direction.
>
> I need to find the shortest path between two nodes, for doing so I am
using
> dijkstra with a custom visitor that stops the search (throwing an
exception) when
> examine_vertex is called on the destination node.
>
> It worked fine, but it run strangely slow. After some profiling, it is
clear that
> most of the time is used in the initialize_vertex function.
> The graph is fairly large, but the path I am looking for are fairly small
(10 edges
> tops usually).
>
> It is possible to skip the initialize phase?
>

There are a number of (undocumented) dijkstra_shortest_paths_no_init(...)
functions in dijkstra_shortest_paths.hpp. I think you need the one with the
signature listed below, because it is the only one that does not initialize
the color map.

A strategy can be to use a visitor to keep a list of all discovered vertices
and re-initialize those (predecessor, distance, color) after each path is
found.

// Call breadth first search
  template <class Graph, class SourceInputIter, class DijkstraVisitor,
            class PredecessorMap, class DistanceMap,
            class WeightMap, class IndexMap, class Compare, class Combine,
            class DistZero, class ColorMap>
  inline void
  dijkstra_shortest_paths_no_init
    (const Graph& g,
     SourceInputIter s_begin, SourceInputIter s_end,
     PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
     IndexMap index_map,
     Compare compare, Combine combine, DistZero zero,
     DijkstraVisitor vis, ColorMap color)


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net