rt
我知道下面的代码肯定过不了(数组太小了)
但是有大佬能告诉我为什么过不了样例吗QwQ
#include<bits/stdc++.h>
#define infinity 10000000
using namespace std;
int e[114][114];
int n,m,s;
void dijkstra(int x)
{
int path[114514],mark[114514],min=114514,dis[114514],k;
for(int i=1;i<=n;i++)
{
mark[i]=0;
dis[i]=e[x][i];
path[i]=x;
}
mark[x]=1;
do
{
min=infinity;
k=0;
for(int i=1;i<=n;i++)
if(mark[i]==0&&dis[i]<min) min=dis[i],k=i;
if(k)
{
mark[k]=1;
for(int i=1;i<=n;i++) if(e[k][i]<infinity&&dis[i]>min+e[k][i]) dis[i]=min+e[k][i],path[i]=k;
}
}while(k);
for(int i=1;i<=n;i++)
if(i!=x&&dis[i]<infinity)
{
k=i;
do
{
//cout<<k<<"<--";
k=path[k];
}while(k!=x);
//cout<<x<<endl;
cout<<dis[i]<<" ";
}
}
int main()
{
cin>>n>>m>>s;
for(int i=1;i<=m;i++)
{
int u,v,w;
cin>>u>>v>>w;
e[u][v]=w;
}
dijkstra(s);
return 0;
}