Dijkstra普通算法及优先队列优化
Posted 行尸走肉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dijkstra普通算法及优先队列优化相关的知识,希望对你有一定的参考价值。
#include<stdio.h> #include<iostream> #define maxv 100 #define inf 0x3fffffff using namespace std; int cost[maxv][maxv]; int d[maxv]; bool used[maxv]; int V; void dijkstra(int s) { for(int i=0;i<v;i++) d[i]=inf; d[s]=0; fill(used,used+v,false); while(true) { int v=-1; for(int u=0;u<V;u++) { if(!used[u]&&(v==-1||d[u]<d[v])) v=u; } if(v=-1) break; used[v]=true; for(int u=0;u<V;u++) { if(d[u]>d[v]+cost[v][u]) d[u]=d[v]+cost[v][u] } } }
#include<iostream> #include<stdio.h> #include<queue> #define maxv 1000 #define inf 0x3fffffff using namespace std; struct edge { int to; int cost; }; typedef pair<int,int> P;//cost v int V; vector<edge>G[maxv]; int d[maxv]; void difkstra(int s) { priority_queue <P,vector<P>,greater<P> >que; fill(d,d+V,inf); d[s]=0; que.push(P(0,s)); while(!que.empty()) { P p=que.top();que.pop(); int v=p.second; for(int i=0;i<G[v].size();i++) { edage e=G[v][i]; if(d[e.to]>d[v]+e.cost) { d[e.to]=d[v]+e.cost; que.push(P(d[e.to],e.to)); } } } }
以上是关于Dijkstra普通算法及优先队列优化的主要内容,如果未能解决你的问题,请参考以下文章