堆优化dijkstra

【模板】单源最短路1

https://www.nowcoder.com/practice/f24504c9ff544f7c808f76693cc34af8

#include<iostream>
#include<cstring>
#include<queue>
#include<vector>
using namespace std;
typedef struct node{
    int x, w;
    bool operator <(const struct node o) const{
        return w>o.w;
    }
}N;
int n, m, dis[5001];
vector<N> g[5001];
void dijkstra(int x){
    bool vis[5001];
    memset(vis, false, sizeof(vis));
    memset(dis, 0x7f, sizeof(dis));
    priority_queue<N> q;
    dis[x] = 0;
    q.push((N){x, 0});
    while(!q.empty()){
        N t = q.top();
        q.pop();
        for(int i=0; i<g[t.x].size(); i++){
            if(dis[t.x]+1<dis[g[t.x][i].x]){
                dis[g[t.x][i].x] = dis[t.x]+1;
                q.push((N){g[t.x][i].x, dis[g[t.x][i].x]});
            }
        }
    }
}
int main(){
    scanf("%d%d", &n, &m);
    for(int i=0; i<m; i++){
        int u, v;
        scanf("%d%d", &u, &v);
        g[u].push_back((N){v, 1});
        g[v].push_back((N){u, 1});
    }
    dijkstra(1);
    if(dis[n] == 0x7f7f7f7f)
        cout<<-1;
    else
        cout<<dis[n];
    return 0;
}

全部评论

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务