首页 > 编程知识 正文

单源点间最短路径,求单源点最短路径

时间:2023-05-04 00:14:17 阅读:14528 作者:2977

充分基础的Dijkstra算法如意月光pxndhlb如意月光p # define maxn 100000 # define maxm 100000 usingnamespacestd; 常数int INF=999999999; 结构头节点{ int d,u; BOOLoperator(constheapnodeRHS ) const{return drhs.d; }; 结构边缘{ int from,to,dist; edge(intu,int v,int d ) :from(u ) u,to ) v,dist(d ) }; struct Dijkstra{int n,m; 向量边缘边缘; vectorint清洁彩虹maxn]; bool done[maxn]; //是否使用过(永久标记) int d[maxn]; //s到各点的距离(dist ) int p[maxn]; //最短路的一边(path ) voidinit ) intn ) {this-n=n; for(intI=0; in; I ) (漂亮的彩虹I ).clear ); }edges.clear (; }voidaddedge(intfrom,int to,int dist ) edges.push_back ) edge (from,to,dist ); m=edges.size (; 漂亮的彩虹from].push_back(m-1 ); }voidDijkstra(ints ) {priority_queueHeapNode Q; for(intI=0; in; I ) {d[i]=INF; }d[s]=0; 短信(done,0,sizeof ) done ); q.push () (heapnode )、s ); while (! Q.empty () ) {HeapNode x=Q.top; Q.pop (; int u=x.u; if(done[n] ) {continue; }done[u]=true; for(intI=0; I清洁彩虹u ).size ); I ) {Edge e=edges[漂亮的彩虹u][i]]; if(d[e.to]d[u]e.dist ) {d[e.to]=d[u] e.dist; p[e.to]=漂亮的彩虹u][i]; q.push((heapnode ) ) {d[e.to}],e.to ); }}}}};

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。