很简单的图论题,不过上半年的时候还跟看天书一样,现在花了半小时温习了下folyd,然后写出来,改了下细节,就AC了
,还是满意外的,进步有时真的是在不知不觉中的
#include <iostream> using namespace std; #define inf 10000000 int Dis[210][210]; int main() { int n,m,u,v,w,i,j,a,b,x,s,t; while (scanf("%d %d",&n,&m) == 2) { for (i = 0;i < n;i++) { for (j = 0;j < n;j++) { if (i == j) Dis[i][j] = 0; else Dis[i][j] = inf; } } for (i = 0;i < m;i++) { scanf("%d %d %d",&a,&b,&x); if (x < Dis[a][b]) { Dis[a][b] = Dis[b][a] = x; } }
scanf("%d %d",&s,&t); for (u = 0;u < n;u++) for (v = 0;v < n;v++) for (w = 0;w < n;w++) if (Dis[v][u] + Dis[u][w] < Dis[v][w]) Dis[v][w] = Dis[v][u] + Dis[u][w]; if (Dis[s][t] < inf) printf("%d\n",Dis[s][t]); else printf("-1\n"); } return 0; }