首页 > 其他 > 详细

SPFA

时间:2019-08-21 00:05:18      阅读:123      评论:0      收藏:0      [点我收藏+]
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <cstring>
 4 #include <queue>
 5 #include <algorithm>
 6 using namespace std;
 7 const int maxn = 500003;
 8 struct node
 9 {
10     int next , to , w;
11 }G[maxn];
12 int head[maxn] , tail;
13 int n , m;
14 int dis[maxn] , used[maxn];
15 queue <int> q;
16 void add(int u , int v , int w)
17 {
18     tail++;
19     G[tail].next = head[u] , G[tail].to = v , G[tail].w = w;
20     head[u] = tail;
21 }
22 void SPFA(int start)
23 {
24     for(int i = 1; i <= n; i++)
25         dis[i] = 2147483647;
26     dis[start] = 0;
27     q.push(start) , used[start] = 1;
28     while(!q.empty())
29     {
30         int now = q.front(); 
31         q.pop();
32         used[now] = 0;
33         for(int i = head[now]; i ; i = G[i].next)
34         {
35             if(dis[now] + G[i].w < dis[G[i].to])
36             {
37                 dis[G[i].to] = dis[now] + G[i].w;
38                 if(!used[G[i].to])
39                     q.push(G[i].to) , used[G[i].to] = 1;
40             }
41         }
42     }
43 }
44 int main()
45 {
46     int start , u , v , w;
47     scanf("%d%d%d" , &n , &m , &start);
48     for(int i = 1; i <= m; i++)
49     {
50         scanf("%d%d%d" , &u , &v , &w);
51         add(u , v , w);
52     }
53     SPFA(start);
54     for(int i = 1; i <= n; i++)
55         printf("%d " , dis[i]);
56     return 0;
57 }

最短路

SPFA

原文:https://www.cnblogs.com/leo-xy/p/11386009.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!