最短路算法 dijkstra 从认识到熟练掌握

59 阅读1分钟

最短路算法 dijkstra

参考资料:

(这里鸣谢代码随想录的分享)

Dijkstra算法,你的最短路来了!(认识dijkstra)

Dijkstra算法,求最短路还能更快!(堆优化版)

个人总结的代码

下面的代码可以AC P4779 【模板】单源最短路径(标准版) - 洛谷

相信你通过上面的参考资料或者下面的代码总结属于你自己的dijkstra

 #include <bits/stdc++.h>  
   
 using namespace std;  
 class Dist{  
 public:  
     int u;  
     int d;  
     Dist(int u_, int d_):u(u_),d(d_){}  
     bool operator < (const Dist &other) const{  
         return d > other.d;// 小顶堆  
     }  
 };  
 void solve() {  
     int n, m, start; // n为顶点 m为边数  
     cin >> n >> m >> start;  
     priority_queue<Dist> q;  
     vector<Dist> g[n + 1];  
     for (int i = 0; i < m; ++i) {  
         int u, v, w;  
         cin >> u >> v >> w;  
         g[u].push_back(Dist(v, w));  
     }  
   
     vector<bool> vis(n + 1, false);  
     vector<int> dis(n + 1, INT_MAX);  
   
     q.push(Dist(start, 0));  
     dis[start] = 0;  
     while (!q.empty()) {  
         Dist cur = q.top();  
         q.pop();  
         int u = cur.u;  
         if(vis[u]) continue;  
         vis[u] = true;  
         for(auto &next:g[u]){  
             int v = next.u;  
             if(dis[v] > dis[u] + next.d){  
                 dis[v] = dis[u] + next.d;  
                 q.push(Dist(v, dis[v]));  
             }  
         }  
     }  
     for(int i = 1;i<=n;i++){  
         cout<<dis[i]<<" ";  
     }  
   
 }  
   
   
 int main() {  
 #ifdef ACM_LOCAL  
     freopen("data.in", "r", stdin);  
 //    freopen("data.out", "w", stdout);  
 #endif  
     int T = 1;  
 //    cin >> T;  
     while (T--) {  
         solve();  
     }  
   
     return 0;  
 }

题单

会不断更新的

  1. Heavy Transportation (flowus.cn)
  2. 模版 P4779 【模板】单源最短路径(标准版) - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
  3. [ABC218F] Blocked Roads (flowus.cn)
  4. [ABC237E]滑雪 --- [ABC237E] Skiing (flowus.cn)
  5. 2.蓝桥王国 - 蓝桥云课 (lanqiao.cn)
  6. 743. 网络延迟时间
  7. 3419. 图的最大边权的最小值
  8. L2-001 紧急救援 - 团体程序设计天梯赛-练习集