裸的算法:
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
const int N=205;
const
int min(int x,int y)
{
return x<y?x:y;
}
void work(int n,int m)
{
int i,j,k,a,b,x,s,t;
int f[N][N];
memset(f,0x3F,sizeof(f));
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&x);
if(x<f[a][b]) f[a][b]=f[b][a]=x;
}
for(i=0;i<n;i++) f[i][i]=0;
for(k=0;k<n;k++)
for(i=0;i<n;i++)
for(j=0;j<n;j++)
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
scanf("%d%d",&s,&t);
if(f[s][t]>200005) printf("-1\n");
else printf("%d\n",f[s][t]);
}
int main()
{
int n,m;
while(scanf("%d%d",&n,&m)!=EOF)
work(n,m);
return 0;
}