0分求助
查看原帖
0分求助
764359
zmx5728楼主2024/10/23 22:22
#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

2024/10/23 22:22
加载中...