diff --git a/src/k_shortest_paths.cpp b/src/k_shortest_paths.cpp index 8227350..fcb96d1 100644 --- a/src/k_shortest_paths.cpp +++ b/src/k_shortest_paths.cpp @@ -203,9 +203,10 @@ std::vector, PredDAG>> k_shortest_paths( for (std::size_t v = 1; v < dag.parent_offsets.size(); ++v) dag.parent_offsets[v] += dag.parent_offsets[v-1]; dag.parents.resize(static_cast(dag.parent_offsets.back())); dag.via_edges.resize(static_cast(dag.parent_offsets.back())); - std::size_t idx = 0; for (std::size_t i = 1; i < P.nodes.size(); ++i) { - dag.parents[idx] = P.nodes[i-1]; dag.via_edges[idx] = P.edges[i-1]; ++idx; + auto v = P.nodes[i]; + auto base = static_cast(dag.parent_offsets[static_cast(v)]); + dag.parents[base] = P.nodes[i-1]; dag.via_edges[base] = P.edges[i-1]; } } items.emplace_back(std::move(dist), std::move(dag)); @@ -249,7 +250,7 @@ std::vector, PredDAG>> k_shortest_paths( std::vector edge_mask_local; edge_mask_local.assign(static_cast(g.num_edges()), static_cast(1)); for (auto const& P : paths) { - if (P.nodes.size() > j && std::equal(P.nodes.begin(), P.nodes.begin() + j, last.nodes.begin())) { + if (P.nodes.size() > j && std::equal(P.nodes.begin(), P.nodes.begin() + static_cast(j + 1), last.nodes.begin())) { // Exclude edge at position j for this path if (P.edges.size() > j) { edge_mask_local[static_cast(P.edges[j])] = 0; @@ -337,9 +338,10 @@ std::vector, PredDAG>> k_shortest_paths( for (std::size_t v = 1; v < dag.parent_offsets.size(); ++v) dag.parent_offsets[v] += dag.parent_offsets[v-1]; dag.parents.resize(static_cast(dag.parent_offsets.back())); dag.via_edges.resize(static_cast(dag.parent_offsets.back())); - std::size_t idx = 0; for (std::size_t i = 1; i < P.nodes.size(); ++i) { - dag.parents[idx] = P.nodes[i-1]; dag.via_edges[idx] = P.edges[i-1]; ++idx; + auto v = P.nodes[i]; + auto base = static_cast(dag.parent_offsets[static_cast(v)]); + dag.parents[base] = P.nodes[i-1]; dag.via_edges[base] = P.edges[i-1]; } } items.emplace_back(std::move(dist), std::move(dag));