代码如下
#include<bits/stdc++.h>
using namespace std;
const int N=100005;
int vis[10005],dis[10005],q[N*2];
int head[N*5],nxt[N*5],to[N*5],tot;
int n,m,ans;
int add(int x,int y,int z){
nxt[++tot]=head[x];to[tot]=y;head[x]=tot;q[tot]=z;
}
void dijis1(int s){
dis[s]=0;
while(!vis[s]){
vis[s]=1;
for(int i=head[s];i;i=nxt[i]){
int v=to[i];
if(!vis[v]&&dis[v]>dis[s]+q[i])
dis[v]=dis[s]+q[i];
}
long long minn=2147483647;
for(int i=1;i<=n;i++){
if(!vis[i]&&minn>dis[i]){
minn=dis[i];
s=i;
}
}
}
}
int main(){
int s;
scanf("%d%d%d",&n,&m,&s);
int x,y,z;
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
}
memset(dis,0x3f,sizeof(dis));
dijis1(s);
for(int i=1;i<=n;i++)
if(dis[i]<1061109567)cout<<dis[i]<<' ';
else cout<<"2147483647"<<' ';
return 0;
}
第一次写帖子,感谢各位大佬,孩子已经琢磨一小时了还不知道错在哪orz