Dij求助sos!!
  • 板块学术版
  • 楼主Archers_wylr
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/11/27 22:19
  • 上次更新2023/11/28 12:41:53
查看原帖
Dij求助sos!!
209186
Archers_wylr楼主2023/11/27 22:19
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+2;
const int inf=0x3f3f3f3f;
typedef long long ll;
int n,m,s,u,v,sum;
struct node{
    int to,val;
};
vector<vector<node> >edge;
int dis[N],vis[N];
void dijkstra(){
    dis[s]=0;
    for(int i=1;i<=n;i++){
        int t=inf,k=0;
        for(int j=1;j<=n;j++){
            if(!vis[j]&&dis[j]<t){
                t=dis[j];
                k=j;
            }
        }    
        vis[k]=1;
        for(auto j:edge[k])if(!vis[j.to])dis[j.to]=min(dis[j.to],dis[k]+j.val);
    }
}
int main(){
    cin>>n>>m>>s;
    edge.resize(n+1);
    memset(dis,inf,sizeof(dis));
    for(int i=1;i<=m;i++){
        cin>>u>>v>>sum;
        edge[v].push_back({u,sum});
        edge[u].push_back({v,sum});
    }
    dijkstra();
    for(int i=1;i<=n;i++){
        if(!vis[i])cout<<(1<<31)-1<<" ";//说明不相连
        else cout<<dis[i]<<" ";
    }
}
2023/11/27 22:19
加载中...