63f0b61ea1
Changes: * support for multiple GTFS feeds as input in filtering, read default global and local configuration files * be a bit more memory conservative * make caching optional * dont delete orphan edge if it would transform a degree 3 node with a possible full turn into a degree 2 node eligible for contraction * dedicated filters for funicular and gondola * make max snap level option more intuitive * allow filter rules for level 0 * additional fallback for station snapping * dont try to route for MOT unequal to trip in -T mode, force-snap to orphaned OSM station if not snap was possible * write bounds to filtered osm * remove unused surrounding heuristic * use bus lanes info * be a bit more tolerant for bus oneway streets * create missing directories * error if no cfg is present, clean up evaluation Makefile
33 lines
894 B
C++
33 lines
894 B
C++
// Copyright 2017, University of Freiburg,
|
|
// Chair of Algorithms and Data Structures.
|
|
// Authors: Patrick Brosi <brosi@informatik.uni-freiburg.de>
|
|
|
|
// _____________________________________________________________________________
|
|
template <typename N, typename E>
|
|
std::vector<std::set<Node<N, E>*> > Algorithm::connectedComponents(
|
|
const UndirGraph<N, E>& g) {
|
|
std::vector<std::set<Node<N, E>*>> ret;
|
|
std::set<Node<N, E>*> visited;
|
|
|
|
for (auto* n : g.getNds()) {
|
|
if (!visited.count(n)) {
|
|
ret.resize(ret.size() + 1);
|
|
std::stack<Node<N, E>*> q;
|
|
q.push(n);
|
|
while (!q.empty()) {
|
|
Node<N, E>* cur = q.top();
|
|
q.pop();
|
|
|
|
ret.back().insert(cur);
|
|
visited.insert(cur);
|
|
|
|
for (auto* e : cur->getAdjList()) {
|
|
if (!visited.count(e->getOtherNd(cur))) q.push(e->getOtherNd(cur));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return ret;
|
|
}
|