20 #ifndef RIPPLE_PEERFINDER_SIM_GRAPHALGORITHMS_H_INCLUDED
21 #define RIPPLE_PEERFINDER_SIM_GRAPHALGORITHMS_H_INCLUDED
24 namespace PeerFinder {
27 template <
typename Vertex>
35 template <
typename Vertex,
typename Function>
40 using Edges =
typename Traits::Edges;
41 using Edge =
typename Traits::Edge;
48 work.emplace_back(&start, 0);
52 Probe
const p(work.front());
54 if (visited.find(p.first) != visited.end())
56 diameter =
std::max(p.second, diameter);
57 visited.insert(p.first);
58 for (
typename Edges::iterator iter(Traits::edges(*p.first).begin());
59 iter != Traits::edges(*p.first).end();
62 Vertex* v(Traits::vertex(*iter));
63 if (visited.find(v) != visited.end())
66 work.emplace_back(v, p.second + 1);
68 f(*p.first, diameter);