-1
这个题吧,看着很水,但是,但是,我还是wr了一遍,后来发现这个题太阴了,两个村庄之间竟然能重复建路,无语了,这不闲着没事找事嘛
#include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> #include<math.h> using namespace std; #define inf 1<<30 int map[205][205],n,m; int vis[205],dist[205]; void Djistla(int s) { int i,j; for (i=0;i<n;i++) { vis[i]=0; dist[i]=map[s][i]; } dist[s]=0; vis[s]=1; for (i=1;i<n;i++) { int Min=inf; int u=s; for (j=0;j<n;j++) if (!vis[j]&&dist[j]<Min) { u=j; Min=dist[j]; } vis[u]=1; for (j=0;j<n;j++) if (!vis[j]&&dist[u]+map[u][j]<dist[j]) dist[j]=dist[u]+map[u][j]; } } int main() { while (~scanf("%d%d",&n,&m)) { int i,j,s,e,v; for (i=0;i<n;i++) for (j=0;j<n;j++) map[i][j]=inf; for (i=1;i<=m;i++) { scanf("%d%d%d",&s,&e,&v); if (map[s][e]>v) //防止两个村庄之间建了不同的路 map[s][e]=map[e][s]=v; } scanf("%d%d",&s,&e); Djistla(s); if (dist[e]>=inf) printf("-1\n"); else printf("%d\n",dist[e]); } return 0; }