码迷,mamicode.com
首页 > 编程语言 > 详细

P103 单源最短路问题 第三种Dijkstra算法

时间:2016-03-02 23:44:17      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:

///通过队列,找出最小的dis[]值,取出配对的vertex值。

/// stack priority_queue set
struct edge
{
    int to;
    int cost;
    
}
;
vector <edge>G[MZX_V];///
typedef pair<int ,int > Pa;///Pa.second是点的编号 Pa.first是到该点的最短距离  
int dis[MAX_V];

void Dijkstra( )
{
    
    priority_queue< Pa,vector<Pa>,greater<Pa> >que;
    ///que中的元素是按照第一个元素的大小从小至大的顺序排列的
    
    
    ///之前初始化的 d
    
     
    dis[s]=0;
    que.push(Pa(0,s));
    
    while(!que.empty()) ///que空的时候empty返回的是true
    {
        Pa pa=que.top();
        que.pop();
        
        int temp1=pa.second();
        if(dis[temp1]<pa.first) continue;///剪枝
        for(int i=0;i<G[temp1].size();++i)
        {
            edge e=G[temp1][i];
            if(dis[ e.to ]<pa.first+e.cost)
        {
            dis[e.to]=pa.first+e.cost;
           que.push(Pa(dis[e.to],e.to));
        }
        }
        
    }
}

 

P103 单源最短路问题 第三种Dijkstra算法

标签:

原文地址:http://www.cnblogs.com/weiweiyi/p/5236765.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!