コード例 #1
0
ファイル: pgr_ksp.cpp プロジェクト: dapotts/pgrouting
std::deque<Path> Pgr_ksp< G >::Yen(
  int64_t  start_vertex, int64_t end_vertex, int K) {
    std::deque<Path> l_ResultList;
    if ((start_vertex != end_vertex) && (K > 0)) {
        if   (!this->get_gVertex(start_vertex, v_source)
           || !this->get_gVertex(end_vertex, v_target)) {
             return l_ResultList;
        }
        m_start = start_vertex;
        m_end = end_vertex;
        executeYen(K);
    }

    while (m_Heap.size()) {
         curr_result_path = *m_Heap.begin();
         m_ResultSet.insert(curr_result_path);
         m_Heap.erase(m_Heap.begin());
    }

    while (m_ResultSet.size()) {
         l_ResultList.push_back((*m_ResultSet.begin()));
         m_ResultSet.erase(m_ResultSet.begin());
    }
    return l_ResultList;
}
コード例 #2
0
ファイル: pgr_ksp.cpp プロジェクト: DavidLiuGitHub/pgrouting
std::deque<Path>
Pgr_ksp< G >::Yen(G &graph, 
  int64_t  start_vertex, int64_t end_vertex, int K, bool heap_paths) {
    m_ResultSet.clear();
    m_Heap.clear();
    if ((start_vertex != end_vertex) && (K > 0)) {
        if   (!graph.get_gVertex(start_vertex, v_source)
           || !graph.get_gVertex(end_vertex, v_target)) {
             std::deque<Path> l_ResultList;
             return l_ResultList;
        }
        m_start = start_vertex;
        m_end = end_vertex;
        executeYen(graph, K);
    }

    while (!m_ResultSet.empty()) {
        m_Heap.insert(*m_ResultSet.begin());
        m_ResultSet.erase(m_ResultSet.begin());
    }
    std::deque<Path> l_ResultList(m_Heap.begin(), m_Heap.end());
    if (!heap_paths && l_ResultList.size() > (size_t) K)
        l_ResultList.resize(K);
    return l_ResultList;
}