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 }