您的位置:首页 > 其它

刘汝佳 Dijkstra 队列优化

2017-10-05 22:37 429 查看
const int inf=999999999;struct Edge{int from,to,dist;Edge(int u,int v,int d):from(u),to(v),dist(d){}};struct Dijkstra{int n,m;vector<Edge> edges;vector<int > G[maxn];bool done[maxn];   //永久标记int d[maxn];    //s到各点距离int p[maxn];void init(n){this->n=n;for(int i=0;i<n;i++) G[i].clear();edges.clear();}void AddEdge(int from,int to,int dist){edges.push_back(Edge(from,to,dist));m=edges.size();G[from].push_back(m-1);}struct HeapNode{int d,u;bool operator < (const HeapNode& rhs) const{return d>rhs.d;}};void dijkstra(int s){priority_queue<HeapNode> Q;for(int i=0;i<n;i++) d[i]=inf;d[s]=0;memset(done,0,sizeof(done));Q.push_back(HeapNode{0,s});while(!Q.empty()){HeapNode x=Q.top();Q.pop();int u=x.u;if(done(u)) continue;done[u]=true;for(int i=0;i<G[u].size();i++){Edge& e=edges[G[u][i]];if(d[e.to]>d[u]+e.dist){d[e.to]=d[u]+e.dist;p[e.to]=G[u][i];Q.push((HeapNode){d[e.to],e.to});}}}}};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: