/**
   * Try to add new paths for the vertex. These new paths reached the specified vertex and ended
   * with the specified edge. A new intermediary path is stored in the paths list of the specified
   * vertex provided that the path can be extended to the end-vertex.
   *
   * @param vertex a vertex which has just been encountered.
   * @param edge the edge via which the vertex was encountered.
   */
  private boolean tryToAddNewPaths(V vertex, E edge) {
    RankingPathElementList<V, E> data = this.seenDataContainer.get(vertex);

    V oppositeVertex = Graphs.getOppositeVertex(this.graph, edge, vertex);
    RankingPathElementList<V, E> oppositeData = this.prevSeenDataContainer.get(oppositeVertex);

    return data.addPathElements(oppositeData, edge);
  }
  /**
   * Try to add the first paths to the specified vertex. These paths reached the specified vertex
   * and ended with the specified edge. A new intermediary path is stored in the paths list of the
   * specified vertex provided that the path can be extended to the end-vertex.
   *
   * @param vertex vertex reached by a path.
   * @param edge edge reaching the vertex.
   */
  private boolean tryToAddFirstPaths(V vertex, E edge) {
    // the vertex has not been reached yet
    RankingPathElementList<V, E> data = createSeenData(vertex, edge);

    if (!data.isEmpty()) {
      this.seenDataContainer.put(vertex, data);
      return true;
    }
    return false;
  }