From 0d432f6377533adb6c43cca7edda9cb636e2e50a Mon Sep 17 00:00:00 2001 From: Dennis Luxen Date: Thu, 16 Apr 2015 16:11:06 +0200 Subject: [PATCH] fix comparison to recognize small components in a static graph --- tools/components.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/tools/components.cpp b/tools/components.cpp index 2168cc5d6..565fb2f48 100644 --- a/tools/components.cpp +++ b/tools/components.cpp @@ -27,8 +27,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "../typedefs.h" #include "../algorithms/tiny_components.hpp" -#include "../data_structures/static_graph.hpp" #include "../data_structures/coordinate_calculation.hpp" +#include "../data_structures/dynamic_graph.hpp" +#include "../data_structures/static_graph.hpp" #include "../util/fingerprint.hpp" #include "../util/graph_loader.hpp" #include "../util/make_unique.hpp" @@ -63,8 +64,8 @@ struct TarjanEdgeData unsigned name_id; }; -using TarjanGraph = StaticGraph; -using TarjanEdge = TarjanGraph::InputEdge; +using TarjanDynamicGraph = StaticGraph; +using TarjanEdge = TarjanDynamicGraph::InputEdge; void DeleteFileIfExists(const std::string &file_name) { @@ -148,6 +149,7 @@ int main(int argc, char *argv[]) // Building an node-based graph std::vector graph_edge_list; +// DeallocatingVector graph_edge_list; for (const auto &input_edge : edge_list) { if (input_edge.source == input_edge.target) @@ -172,15 +174,16 @@ int main(int argc, char *argv[]) "input edge vector not properly deallocated"); tbb::parallel_sort(graph_edge_list.begin(), graph_edge_list.end()); - auto graph = std::make_shared(number_of_nodes, graph_edge_list); + const auto graph = std::make_shared(number_of_nodes, graph_edge_list); graph_edge_list.clear(); graph_edge_list.shrink_to_fit(); SimpleLogger().Write() << "Starting SCC graph traversal"; RestrictionMap restriction_map(restriction_list); - auto tarjan = - osrm::make_unique>(graph, restriction_map, bollard_node_list); + auto tarjan = osrm::make_unique>(graph, + restriction_map, + bollard_node_list); tarjan->run(); SimpleLogger().Write() << "identified: " << tarjan->get_number_of_components() << " many components"; @@ -233,9 +236,9 @@ int main(int argc, char *argv[]) percentage.printIncrement(); for (const auto current_edge : graph->GetAdjacentEdgeRange(source)) { - const TarjanGraph::NodeIterator target = graph->GetTarget(current_edge); + const TarjanDynamicGraph::NodeIterator target = graph->GetTarget(current_edge); - if (source < target || graph->EndEdges(target) == graph->FindEdge(target, source)) + if (source < target || graph->EndEdges(target) >= graph->FindEdge(target, source)) { total_network_length += 100 * coordinate_calculation::euclidean_distance(