void OLCTriangle::AddStartEdges() { // use last point as single start, // this is out of order but required ScanTaskPoint destination(0, n_points - 1); LinkStart(destination); }
bool TaskDijkstraMax::DistanceMax() { if (!RefreshTask()) return false; dijkstra.Reserve(256); dijkstra.Clear(); LinkStart(ScanTaskPoint(0, 0)); return Run(); }
void OLCSprint::AddStartEdges() { assert(num_stages <= MAX_STAGES); assert(num_stages > 0); assert(n_points > 0); const int max_altitude = GetMaximumStartAltitude(TraceManager::GetPoint(n_points - 1)); const ScanTaskPoint start(0, FindStart()); if (GetPoint(start).GetIntegerAltitude() <= max_altitude) LinkStart(start); }
bool TaskDijkstraMin::DistanceMin(const SearchPoint ¤tLocation) { if (!RefreshTask()) return false; dijkstra.Reserve(256); dijkstra.Clear(); if (active_stage > 0) { AddStartEdges(currentLocation); } else { LinkStart(ScanTaskPoint(0, 0)); } return Run(); }
void ContestDijkstra::AddStartEdges() { assert(num_stages <= MAX_STAGES); assert(n_points > 0); const int max_altitude = incremental ? GetMaximumStartAltitude(GetPoint(n_points - 1)) : 0; for (ScanTaskPoint destination(0, 0), end(0, n_points); destination != end; destination.IncrementPointIndex()) { // only add points that are valid for the finish if (!incremental || GetPoint(destination).GetIntegerAltitude() <= max_altitude) LinkStart(destination); } }