Exemple #1
0
void
OLCTriangle::AddStartEdges()
{
  // use last point as single start,
  // this is out of order but required

  ScanTaskPoint destination(0, n_points - 1);
  LinkStart(destination);
}
Exemple #2
0
bool
TaskDijkstraMax::DistanceMax()
{
  if (!RefreshTask())
    return false;

  dijkstra.Reserve(256);
  dijkstra.Clear();
  LinkStart(ScanTaskPoint(0, 0));
  return Run();
}
Exemple #3
0
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);
}
Exemple #4
0
bool
TaskDijkstraMin::DistanceMin(const SearchPoint &currentLocation)
{
  if (!RefreshTask())
    return false;

  dijkstra.Reserve(256);
  dijkstra.Clear();

  if (active_stage > 0) {
    AddStartEdges(currentLocation);
  } else {
    LinkStart(ScanTaskPoint(0, 0));
  }

  return Run();
}
Exemple #5
0
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);
  }
}