首页 > 其他 > 详细

dijkstra模板

时间:2018-02-14 12:20:25      阅读:223      评论:0      收藏:0      [点我收藏+]

题目大意:

最短路模板;

基本思路:

贪心

代码如下:

int dis[maxn];
bool vis[maxn];
vector<int>gra[maxn];
struct Node{
    int u,w;
    Node(int u_,int w_){
        u=u_;w=w_;
    }
    bool operator<(const Node& rhs)const{
        return w>rhs.w;
    }
};
struct Edge{
    int from,to,dist;
    Edge(int u,int v,int d):from(u),to(v),dist(d){}
}edge[maxn];
void dijkstra(int s){
    priority_queue<Node>pq;pq.push(Node(s,0));
    memset(dis,inf,sizeof(dis));dis[s]=0;
    memset(vis,false,sizeof(vis));
    while(!pq.empty()){
        Node tmp=pq.top();
        int u=tmp.u;
        if(vis[u]){
            continue;
        }
        vis[u]=true;
        int sz=gra[u].size();
        for(int i=0;i<sz;i++){
            Edge& e=edge[gra[u][i]];
            if(dis[e.to]>dis[u]+e.dist){
                dis[e.to]=dis[u]+e.dist;
                pq.push(Node(e.to,dis[e.to]));
            }
        }
    }
}

  

dijkstra模板

原文:https://www.cnblogs.com/imzscilovecode/p/8448119.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!