SPFA模板

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 #include <cstring>
 5 #include <algorithm>
 6 #include <queue>
 7 #include <stack>
 8 #include <vector>
 9 #include <iomanip>
10 #include <climits>
11 using namespace std;
12 int n,m,d[200],inq[200];//inq记录该点是否在队列里,d表示s点到各个点的最短距离; 
13 vector<pair<int,int> >e[200];
14 void init()
15 {
16     for(int i=0;i<200;i++)
17     {
18         e[i].clear();
19         inq[i]=0;
20         d[i]=1e9;
21     }
22 } 
23 int main(int argc, char *argv[])
24 {
25     
26     while(scanf("%d%d",&n,&m)!=EOF)
27     {
28         init();
29         for(int i=0;i<m;i++)
30         {
31             int x,y,z;
32             scanf("%d%d%d",&x,&y,&z);
33             e[x].push_back(make_pair(y,z));
34             e[y].push_back(make_pair(x,z));
35         }
36         int s,t;
37         scanf("%d%d",&s,&t);//s为起点,t为终点 
38         queue<int>q;
39         q.push(s),d[s]=0,inq[s]=1;
40         while(!q.empty())
41         {
42             int now=q.front();
43             q.pop();inq[now]=0;
44             for(int i=0;i<e[now].size();i++)
45             {
46                 int v=e[now][i].first;
47                 if(d[v]>d[now]+e[now][i].second)
48                 {
49                     d[v]=d[now]+e[now][i].second;
50                     if(inq[v]==1)continue;
51                     inq[v]=1;
52                     q.push(v);
53                 }
54             }  
55         }
56         printf("%d\n",d[t]);
57     }
58     
59     return 0;
60 }

 

posted @ 2018-10-13 11:02  huluxin  阅读(114)  评论(0编辑  收藏  举报