堆优化的Dijkstra(cmp函数的写法)

#include <bits/stdc++.h>

using namespace std;
const int N=11000;
int dis[11000];
vector<int>len[N];
vector<int>edge[N];
struct cmp{
    bool operator()(int x,int y){
        return dis[x]>dis[y];
    }
};
void dij(int u){
    priority_queue<int,vector<int>,cmp >heap;
    heap.push(u);
    dis[u] = 0;
    while(!heap.empty()){
        int u = heap.top();
        int i = -1;
        for(auto v:edge[u]){
            i ++;
            if(dis[v]>dis[u]+len[u][i]){
                dis[v] = dis[u]+len[u][i];
                heap.push(v);
            }
        }
        heap.pop();
    }
}
int main()
{
 //   freopen("a.txt","r",stdin);
    ios::sync_with_stdio(0);
    int i,n,m;
    while(cin>>n>>m)
    {
    for(i = 1;i <= n;i ++) dis[i] = 1e9;
    for(i = 1;i <= n;i ++) edge[i].clear();
    for(i = 1;i <= n;i ++) len[i].clear();
    for(i = 1;i <= m;i ++){
        int u,v,l;
        cin>>u>>v>>l;
        edge[u].push_back(v);
        edge[v].push_back(u);
        len[u].push_back(l);
        len[v].push_back(l);
    }
    dij(1);
    cout<<dis[n]<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_30358129/article/details/80572746