#include <cstdio> #include <iostream> #include <cstring> using namespace std; const int INF = 0x3fffffff; int g[1005][1005]; int m; void Floyd() { int i, j, k; for (k=1;k<=m;k++) { for (i=1;i<=m;i++) { for (j=1;j<=m;j++) { if (g[i][j]>g[i][k]+g[k][j]) { g[i][j]=g[i][k]+g[k][j]; } } } } } int main() { int T, a, b, len; int s, t, p; scanf("%d", &T); while(T--) { scanf("%d%d", &m, &p); scanf("%d%d",&s,&t); for(int i = 1; i <= m; ++i) for(int j = 1; j < i; ++j) g[i][j] = g[j][i] = INF; while(p--) { scanf("%d%d%d", &a, &b, &len); if(g[a][b] > len) g[a][b] = g[b][a] = len; } Floyd(); printf("%d\n", g[s][t]); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。