• 欢迎加入MineBBS QQ讨论群:点击查看所有的官方讨论群
  • 我们将于近期对服务器进行迁移,服务可能中断至多2日。请各位安排好自己的访问计划,造成不便敬请谅解!
  • MineBBS入站考试已经上线!想要成为【正式会员】解锁更多功能吗?快来参与吧!【点我去看】

C语言 【C with STL】 单源最短路之SPFA算法

JiansYuan

【Lv:3】

注册
2020/05/09
消息
19
金粒
4,818.70金粒
呃呃呃
[MD] ```cpp #include <bits/stdc++.h> using namespace std; const int N = 10005; const int INF = 0x3f3f3f; vector<pair<int, int> > g[N]; int d[N], cnt[N]; bool vis[N]; int main(){ int n, m, s; scanf("%d %d %d", &n, &m, &s); for(int i = 0; i < m; i++) { int u, v, w; scanf("%d %d %d", &u, &v, &w); g[u].push_back({v, w}); } for(int i = 1; i <= n; i++) { vis[i] = false; d[i] = INF; cnt[i] = 0; } d[s] = 0; queue<int> q; q.push(s); bool flag = false; while(q.size()) { int u = q.front(); q.pop(); vis[u] = false; for(auto i : g[u]) { int v = i.first, w = i.second; if(d[v] > d[u] + w){ d[v] = d[u] + w; cnt[v]++; if(cnt[v] > n) flag = true; if(!vis[v]){ vis[v] = true; q.push(v); } } } } if(flag) printf("ERROR!\n"); else for(int i=1;i<=n;i++) printf("%d ", d[i]); return 0; } ``` [/i][/u][/u][/u][/u][/s][/i][/i][/i][/u][/MD]
 

在线会员

  • 妳得惯着她
  • ender的罗小黑
  • 诞中
  • ksandu
  • mcmanzi
  • hanyee
  • qwq220900
  • Klinsky6
后退
顶部 底部