vector<vector<pair<int, int>>> g(n);
for (auto &e: edges) {
int u = e[0], v = e[1], cnt = e[2];
g[u].emplace_back(v, cnt);
g[v].emplace_back(u, cnt); // 建图
}
vector<int> dijkstra(vector<vector<pair<int, int>>> &g, int start) {
vector<int> dist(g.size(), INT_MAX);
dist[start] = 0;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<>> pq;
pq.emplace(0, start);
while (!pq.empty()) {
auto[d, x] = pq.top();
pq.pop();
if (d > dist[x]) continue;
for (auto[y, wt] : g[x]) {
int new_d = dist[x] + wt;
if (new_d < dist[y]) {
dist[y] = new_d;
pq.emplace(new_d, y);
}
}
}
return dist;
}
最短路径dijkstrac++模板
于 2022-12-13 17:22:26 首次发布