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

///通过队列,找出最小的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算法)