#include<bits/stdc++.h>
using namespace std;
const int N=10010;
int n,m,s,dis[N],vis[N];
struct node{
int to,w;
}e;
vector <node> a[N];
void spfa(int s)
{
for (int i=1;i<=n;i++) dis[i]=9999999;
queue <int> q;
q.push(s);
dis[s]=0;
vis[s]=1;
while (q.empty()==false)
{
int u=q.front();
q.pop();
vis[u]=0;
for (int i=0;i<a[u].size();i++)
{
int to=a[u][i].to,w=a[u][i].w;
if (dis[to]>dis[u]+w)
{
dis[to]=dis[u]+w;
if (vis[to]==false)
{
q.push(to);
vis[to]=true;
}
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&s);
for (int i=1;i<=m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
e.to=v; e.w=w;
a[u].push_back(e);
}
spfa(s);
for (int i=1;i<=n;i++) cout<<dis[i]<<" ";
return 0;
}
P3371 【模板】单源最短路径(弱化版) spfa
最新推荐文章于 2024-08-01 14:40:58 发布