1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
| #include <iostream> #include <string.h> #include <queue>
using namespace std; const int maxn = 201; const int INF = 0x3f3f3f3f; int e[maxn][maxn]; int startp,endp; bool vis[maxn]; int dist[maxn]; int n,m;
int spfa() { memset(vis,0,sizeof vis); memset(dist,0x3f,sizeof dist);
dist[startp] = 0; vis[startp] = 1; queue<int> que; que.push(startp);
while (!que.empty()) { int cur = que.front(); que.pop(); vis[cur] = 0; for (int i=0; i<n; i++) { if (e[cur][i] < INF && dist[i] > dist[cur] + e[cur][i]) { dist[i] = dist[cur] + e[cur][i]; if (!vis[i]) que.push(i),vis[i] = 1; } } } return dist[endp]; } int main() {
while (scanf("%d%d",&n,&m) != EOF) { memset(e,0x3f,sizeof e); for (int i =1; i<=m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); if (w < e[u][v]) e[u][v] = e[v][u] = w; } scanf("%d%d",&startp,&endp); int ans = spfa(); if (ans < INF) printf("%d\n",ans); else printf("-1\n"); } return 0; }
|