首页 > 代码库 > spfa模板

spfa模板

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <vector>
 4 #include <queue>
 5 using namespace std;
 6 vector<int> to[1001];
 7 queue<int> que;
 8 int x,y,z,n,m,a,b,d[1001],w[1001][1001];
 9 bool vis[1001];
10 int main()
11 {
12     scanf("%d%d",&n,&m);
13     for (int i=1;i<=m;i++)
14     {
15         scanf("%d%d%d",&x,&y,&z);
16         to[x].push_back(y);to[y].push_back(x);
17         w[y][x]=w[x][y]=z;
18     }
19     scanf("%d%d",&a,&b);
20     memset(d,0x7f,sizeof(d));
21     que.push(a);d[a]=0;
22     while(!que.empty())
23     {
24         int exp=que.front(),sz=to[exp].size();vis[exp]=0;que.pop();
25         for (int i=0;i<sz;i++)
26         {
27             int end=to[exp][i];
28             if(d[end]>w[exp][end]+d[exp])
29             {
30                 d[end]=w[exp][end]+d[exp];
31                 if (!vis[end]) {vis[end]=1;que.push(end);}
32             }
33         }
34     }
35     printf("%d",d[b]);
36 }

 

spfa模板