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 }