4图-5单源最短路Dijkstra(priority_queue优化)

//Dijkstra[priority_queue优化]
struct edge {int to,cost;};     //终点,边权
vector G[MAXV];           //邻接表存地图
typedef pair P;        //first最短距离,second顶点编号
int d[MAXV], V;                 //距起点到当前顶点的距离
void dijkstra(int s){           //传入起点S
    priority_queue,greater

> que;//开优先队列 memset(d,INF,sizeof d); //初始化 d[s] = 0; //起点到起点距离0 que.push(P(0,s)); //把起点推入队列 while(!que.empty()){ //队列非空 P p=que.top();que.pop();//读出队首并弹出 int v=p.second; //顶点的编号 if(d[v]d[v]+e.cost){ //如果可以松驰 d[e.to]=d[v]+e.cost; //就更新最小距离 que.push(P(d[e.to],e.to)); //然后把新插入的点打入队列 } } } } /*** 说明: 邻接矩阵实现dijkstra算法复杂度是O(V²)。需要优化的是数值的插入(更新)和取出最小值两个操作 不枚举的话插入与最小都是从头到尾扫一次,而代码中使用堆降到O(ElogV) ***/

你可能感兴趣的:(考研计机)