dijkstra 求助
查看原帖
dijkstra 求助
326382
Thomas_Cat楼主2020/10/31 00:24
#include<bits/stdc++.h>
using namespace std;
const int maxn=100000009;
int e[4001][4001],dis[maxn],n,m,flag[maxn],Min,u,s;
int inf=pow(2,31)-1;
void init(){
    cin>>n>>m>>s;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++)
            if(i==j) e[i][j]=0;
            else e[i][j]=inf;
    for(int i=1;i<=m;i++){
        int a,b,c;
        cin>>a>>b>>c;
        e[a][b]=c;
        e[b][a]=e[a][b];
    }
    for(int i=1;i<=n;i++)
        dis[i]=e[s][i];
    flag[s]=1;
    return;
}
void dij(){
    for(int x=1;x<n;x++){
        Min=inf;
        for(int i=1;i<=n;i++)
            if(flag[i]==0&&dis[i]<Min){
                Min=dis[i];
                u=i;
            }
        flag[u]=1;
        for(int j=1;j<=n;j++)
            if(flag[j]==0&&e[u][j]<inf&&dis[j]>dis[u]+e[u][j])
                dis[j]=dis[u]+e[u][j];
    }
    return;
}
int main(){
    init();
    dij();
    for(int i=1;i<=n;i++)
        cout<<dis[i]<<' ';
    return 0;
}

为啥全部wa了 /kk

提供一组样例:

in
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
out
221 52 29 3 0 
2020/10/31 00:24
加载中...