通過Michal Forisek A C++ 11的實現Dijkstra算法的計算確實的最短距離相當快&典雅,沒有太多的代碼。但是我怎麼能回到路上?做一個C++ 11 Dijkstra算法實現返回最短路徑
struct edge
{
edge(const int _to, const int _len): to(_to), length(_len)
{
}
int to;
int length;
};
int dijkstra(const vector< vector<edge> > &graph, int source, int target) {
vector<int> min_distance(graph.size(), INT_MAX);
min_distance[ source ] = 0;
set< pair<int,int> > active_vertices;
active_vertices.insert({0,source});
while (!active_vertices.empty()) {
int where = active_vertices.begin()->second;
if (where == target) return min_distance[where];
active_vertices.erase(active_vertices.begin());
for (auto ed : graph[where])
if (min_distance[ed.to] > min_distance[where] + ed.length) {
active_vertices.erase({ min_distance[ed.to], ed.to });
min_distance[ed.to] = min_distance[where] + ed.length;
active_vertices.insert({ min_distance[ed.to], ed.to });
}
}
return INT_MAX;
}
int main()
{
std::vector<edge> node0 {edge(1,1), edge (3,7), edge (2,1)};
std::vector<edge> node1 {edge(0,1), edge (2,2), edge (3,4)};
std::vector<edge> node2 {edge(1,2), edge (3,3), edge (0,1)};
std::vector<edge> node3 {edge(2,3), edge (0,7), edge (1,4)};
std::vector<std::vector<edge>> graph {node0, node1, node2, node3};
int r = dijkstra(graph, 0, 3);
return 0;
}
謝謝,你能否更新代碼片段? – Madhatter
@Madhatter現場示例添加。 – Yakk