Dijkstra算法优先队列优化

不能处理带有负环的图,复杂度稳定O Elogv。

struct edge
{
    int v,w;
};
typedef pair P; //first是最短距离,second是顶点的编号
int V;//顶点个数
vector G[MAXV];
int dis[MAXV];

void dijkstra(int s)
{
    priority_queue,greater

> q; memset(dis,INF,sizeof dis); dis[s] = 0; q.push(P(0,s)); //把起点推入队列 while(!q.empty()) { P p = q.top(); q.pop(); int u = p.second; //顶点的编号 if (dis[u] < p.first) continue; for(int i = 0; i < G[u].size(); i++) { int v = G[u][i].v; int w = G[u][i].w; if (dis[v] > dis[u] + w) { dis[v] = dis[u] + w; que.push(P(dis[v],v)); } } } }



你可能感兴趣的:(最短路)