#include <iostream>
#include <cstring>
#include <algorithm>
#include <math.h>
#define int long long
using namespace std;
int n,m,s,maxn=pow(2,31)-1;
int a[10002][10002],dist[10005],pre[10005],flag[10005];
//void print(){
// for (int i=0; i<10; i++) {
// for (int j=0; j<10; j++) {
// cout<<a[i][j]<<" ";
// }
// cout<<endl;
// }
//}
void dijkstra(int ss){
for(int j=1;j<=n;j++){
if(a[ss][j]<maxn){
dist[j]=a[ss][j];
}
}
flag[ss]=1,dist[ss]=0;
for(int i=1;i<=n;i++){
int mind=maxn,k;
//print();
for(int j=1;j<=n;j++){
if(flag[j]==0&&dist[j]<mind){
mind=dist[j],k=j;
}
}
flag[k]=1;
for(int j=1;j<=n;j++){
if(!flag[j]&&dist[j]>=mind+a[k][j]){
dist[j]=mind+a[k][j];
}
}
}
for(int i=1;i<=n;i++)cout<<dist[i]<<" ";
}
signed main() {
memset(dist,0x3f,sizeof(dist));
memset(a,0x3f,sizeof(a));
cin>>n>>m>>s;
for(int i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;a[x][y]=z;}
dijkstra(s);
return 0;
}
只要70分 数据*1:
5 15 5
2 5 181
1 5 98
4 2 49
3 2 262
4 3 26
2 4 192
5 1 221
2 2 254
4 4 233
1 5 44
5 4 67
4 2 214
1 1 47
1 1 118
5 4 3
答案:
221 52 29 3 0
我的:
221 217 29 3 0