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; }
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; }