单源最短路模板,程序错在哪里?
题目链接:https://www.#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
int N,M,S,Fi,Gi,Wi,dis[10005],book[10005],u[500005],v[500005],w[500005],first[10005],next[500005];
int main(void){
int i,k,m,n;
scanf("%d %d %d",&N,&M,&S);
for(i=1;i<=N;i++) first[i]=-1;
for(i=1;i<=M;i++){
scanf("%d %d %d",&u[i],&v[i],&w[i]);
next[i]=first[u[i]];
first[u[i]]=i;
}
for(i=1;i<=N;i++) dis[i]=2147483647;
memset(book,0,sizeof(book));
dis[S]=0;
k=first[S];
while(k!=-1){
dis[v[k]]=min(dis[v[k]],w[k]);
k=next[k];
}
book[S]=1;
n=S;
for(i=1;i<=N-1;i++){
m=2147483647;
k=first[S];
while(k!=-1){
if(book[v[k]]==0 && dis[v[k]]<m){
m=dis[v[k]];
n=v[k];
}
k=next[k];
}
if(book[n]==1) break;
book[n]=1;
k=first[n];
while(k!=-1){
if(dis[v[k]]>dis[n]+w[k]){
dis[v[k]]=dis[n]+w[k];
}
k=next[k];
}
}
for(i=1;i<N;i++) printf("%d ",dis[i]);
printf("%d\n",dis[N]);
return 0;
}
提交显示答案错误,求大佬帮忙。