求助!
查看原帖
求助!
876268
tanzexiaodezhonghao楼主2024/7/8 14:17
#include<bits/stdc++.h>
using namespace std;const int N=1e5+5;int n,m,s,t,pre[N];
struct edge{int v,w;};
struct node{int v,d;};
struct cmp{bool operator()(node x,node y){return x.d>y.d;}};
vector<edge> G[N];int dist[N];bool vis[N];
priority_queue< node,vector<node>,cmp > Q;
void dijkstra(){
    memset(dist,0x3f,sizeof(dist));
    dist[1]=0;Q.push((node){1,0});pre[1]=1;
    while(Q.size()){
        node t=Q.top();Q.pop();if(vis[t.v]==1) continue;
        vis[t.v]=1;
        for(int i=0;i<G[t.v].size();i++){
            int v=G[t.v][i].v,w=G[t.v][i].w;
            if(dist[v]>dist[t.v]+w){
                dist[v]=dist[t.v]+w;
                pre[v]=t.v;
                Q.push((node){v,dist[v]});
            }
        }
    }

}
void dfs(int x){
    if(pre[x]!=x) dfs(pre[x]);
    cout<<x<<" ";
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        if(u!=v){G[u].push_back((edge){v,w});G[v].push_back((edge){u,w});}
    }
    dijkstra();
    if(dist[n]==0x3f3f3f3f) cout<<-1;
    else dfs(n);
    return 0;
}
2024/7/8 14:17
加载中...