标签:
///通过队列,找出最小的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)); } } } }
标签:
原文地址:http://www.cnblogs.com/weiweiyi/p/5236765.html