裸的最短路
背的板子
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<queue>
#include<vector>
using namespace std;
int t,c,ts,te,i,j,tot,p1,p2,pop,map[2500+5][2500+5],f[2500+5],minx,dis[2500+5],dismin,mint;
int main()
{
memset(dis,127,sizeof(dis));
scanf("%d%d%d%d",&t,&c,&ts,&te);
for(i=1;i<=c;i++)
{
scanf("%d%d%d",&p1,&p2,&pop);
map[p1][p2]=pop;
map[p2][p1]=pop;
}
dis[ts]=0;
for(i=1;i<=t;i++)
{
dismin=2000;
for(j=1;j<=t;j++)
if(!f[j]&&dis[j]<dismin)
{
mint=j;
dismin=dis[j];
}
minx=mint;
f[minx]=1;
if(minx==te) break;
for(j=1;j<=t;j++)
if(!f[j]&&map[minx][j]) dis[j]=min(dis[j],dis[minx]+map[minx][j]);
}
printf("%d",dis[te]);
return 0;
}