题意:给你张图给你起点终点叫你求最短路
spfa板子
#include<iostream>
#include<queue>
#include<cstring>
#include<cstdio>
#define N 20050
#define INF 0x3f3f3f3f
using namespace std;
int n,m,a,b,tot=0;
int head[N],next[N],to[N],dist[N],visit[N],c[N];
void add_edge(int x,int y,int z)
{
to[++tot]=y;
c[tot]=z;
next[tot]=head[x];
head[x]=tot;
}
queue<int> q;
void spfa(int o)
{
q.push(o);visit[o]=1;
while(!q.empty())
{
int x=q.front();q.pop();visit[x]=0;
for (int i=head[x];i;i=next[i])
{
int y=to[i];
{
if (dist[y]>dist[x]+c[i])
{
dist[y]=dist[x]+c[i];
if (!visit[y]) q.push(y);visit[y]=1;
}
}
}
}
}
int main()
{
scanf("%d%d%d%d",&n,&m,&a,&b);
for (int i=0;i<=n;i++) dist[i]=INF,visit[i]=0;
for (int i=0;i<m;i++)
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add_edge(x,y,z);
add_edge(y,x,z);
}
dist[a]=0;spfa(a);
printf("%d\n",dist[b]);
return 0;
}