#include<bits/stdc++.h>
using namespace std;
const int N=100;
const int INF=1e7;
int mp[N][N],dist[N],p[N],n,m;
bool flag[N];
void dijkstra(int u)
{
for(int i=1;i<=n;i++)
{
dist[i]=mp[u][i];
flag[i]=false;
if(dist[i]==INF) p[i]=-1;
else p[i]=u;
}
dist[u]=0;
flag[u]=true;
for(int i=1;i<=n;i++)
{
int temp=INF,t=u;
for(int j=1;j<=n;j++)
{
t=j;
temp=dist[j];
}
if(t==u) return;
flag[t]=true;
for(int j=1;j<=n;j++)
{
if(!flag&&mp[t][j]<INF)
{
if(dist[j]>(dist[t]+mp[t][j]))
{
dist[j]=dist[t]+mp[t][j];
p[j]=t;
}
}
}
}
}
int main()
{
int u,v,w,st;
cin>>n>>m>>st;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) mp[i][j]=INF;
while(m--)
{
cin>>u>>v>>w;
mp[u][v]=min(mp[u][v],w);
}
dijkstra(st);
for(int i=1;i<=n;i++) cout<<dist[i]<<' ';
return 0;
}
数组开的大一点会编译错误
蒟蒻快哭了qaq