-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.cpp
71 lines (58 loc) · 2.09 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <CHDijkstra.hpp>
#include <CLI/CLI.hpp>
#include <Graph.hpp>
#include <GraphContractor.hpp>
#include <MultiTargetDijkstra.hpp>
#include <Timer.hpp>
#include <fmt/core.h>
#include <fmt/ranges.h>
#include <iostream>
using datastructure::readFromNonContractedFile;
using datastructure::GraphContractor;
using datastructure::NodeId;
using datastructure::NodeId;
using pathfinding::CHDijkstra;
using pathfinding::MultiTargetDijkstra;
auto main(int argc, char **argv) -> int
{
CLI::App app{"GraphContractor - Schein für ALgEng"};
std::string graph_file;
app.add_option("-f,--file",
graph_file,
"Graph which will be contracted")
->required()
->check(CLI::ExistingFile);
CLI11_PARSE(app, argc, argv);
Timer t;
fmt::print("read non-CH Graph...\n");
auto graph = readFromNonContractedFile(graph_file).value();
fmt::print("graph build in: {}s\n", t.elapsed());
GraphContractor contractor{graph};
t.reset();
contractor.contractGraph();
fmt::print("graph contracted in: {}s\n", t.elapsed());
auto own_ch_graph = std::move(contractor.getGraph());
NodeId from;
NodeId to;
// CHDijkstra ch_pathfinder{ch_graph};
CHDijkstra own_ch_pathfinder{own_ch_graph};
MultiTargetDijkstra pathfinder{graph};
while(true) {
fmt::print("from: ");
std::cin >> from;
fmt::print("to: ");
std::cin >> to;
t.reset();
auto own_ch_distance = own_ch_pathfinder.shortestDistanceFromTo(from,
to);
auto own_ch_time = t.elapsed();
fmt::print("CH distance:\t{}\n", own_ch_distance);
fmt::print("calculated CH distance in: {}s\n", own_ch_time);
t.reset();
auto distance = pathfinder.shortestDistanceFromTo(from, to);
auto normal_time = t.elapsed();
fmt::print("normal dijkstra distance:\t{}\n", distance);
fmt::print("calculated normal dijkstra distances in: {}s\n", normal_time);
fmt::print("speedup:\t{}\n", normal_time / own_ch_time);
}
}