前言:
如今兄弟们对“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算法图示