龙空技术网

Dijkstra 算法 C++实现模板

好好学习11天天向上 108

前言:

如今兄弟们对“dijkstra算法图示”大体比较看重,兄弟们都想要分析一些“dijkstra算法图示”的相关文章。那么小编也在网摘上汇集了一些对于“dijkstra算法图示””的相关内容,希望同学们能喜欢,同学们快快来学习一下吧!

下面是一个 Dijkstra 算法的 C++ 模板:

#include <bits/stdc++.h>#define INF 0x3f3f3f3fusing namespace std;const int N = 100005;int n, m;vector<pair<int, int>> g[N];int dist[N];bool vis[N];void dijkstra(int s) {    memset(dist, 0x3f, sizeof dist);    dist[s] = 0;    priority_queue<pair<int, int>> q;    q.push({0, s});    while (!q.empty()) {        int u = q.top().second;        q.pop();        if (vis[u]) continue;        vis[u] = true;        for (auto [v, w] : g[u]) {            if (dist[v] > dist[u] + w) {                dist[v] = dist[u] + w;                q.push({-dist[v], v});            }        }    }}int main() {    cin >> n >> m;    while (m--) {        int u, v, w;        cin >> u >> v >> w;        g[u].push_back({v, w});        g[v].push_back({u, w});    }    dijkstra(1);    for (int i = 1; i <= n; i++) cout << dist[i] << " ";    return 0;}

这个代码模板使用 STL 中的 vector 和 priority_queue 实现了 Dijkstra 算法。其中,数组 g 用于存储图的邻接点信息,数组 dist 用于存储从源点到其他点的最短距离,数组 vis 用于标记点是否已经被遍历过。

标签: #dijkstra算法图示