复杂度O(mlogn)

输入起点s,可以得到从起点到各点的最短路距离数组dis[i]

过程:

1.初始化:清空标记数组,初始化距离数组设为inf,起点距离设为0,开优先队列,搜索起点

2.搜索:取出队首并pop,如果队首节点u的当前最短路比u的原先的最短路大则跳过,否则遍历u的邻接点如果v没有被访问过且u的最短路加上当前邻接边边权小于原先v的最短路,则更新v的最短路且搜索v

3.注意:在bool operator(const node &a)const{return a.w<w;}中是要a.w<w才能让优先队列中w小的优先,如果是a.w>w则是w大的优先

 struct node{
int pos;
ll w;
node(int pp,ll ww){pos=pp;w=ww;}
bool operator<(const node &a)const{return a.w<w;} ///调了一个下午,原来是要a.w<w才能让优先队列中w小的优先,如果是a.w>w则是w大的优先
};
void dijkstra(int s){
memset(vis,,sizeof vis);
memset(dis,inf,sizeof dis);
dis[s]=;
priority_queue<node> q;
node a(s,dis[s]);
q.push(a);
while(q.size()){
node x=q.top();q.pop();
int u=x.pos;
if(x.val>dis[u])continue;
for(int i=head[u];~i;i=e[i].nex){
int v=e[i].to;
if(!vis[v]&&(dis[v]>e[i].w+dis[u])){
dis[v]=e[i].w+dis[u];
a.pos=v,a.val=dis[v];
q.push(a);
}
}
}
}
/**
初始化:清空标记数组,初始化距离数组设为inf,起点距离设为0,开优先队列,搜索起点
搜索:取出队首并pop,如果队首节点u的当前最短路比u的原先的最短路大则跳过,否则遍历u的邻接点v,
如果v没有被访问过且u的最短路加上当前邻接边边权小于原先v的最短路,则更新v的最短路且搜索v
注意:在bool operator(const node &a)const{return a.w<w;}中原来是要a.w<w才能让优先队列中w小的优先,如果是a.w>w则是w大的优先
**/

最新文章

  1. jQuery学习之路(7)- 用原生JavaScript实现jQuery的某些简单功能
  2. 获取URL参数值
  3. mac(linux) 上如何安装ant
  4. 如何设计优秀的API(转)
  5. Ubuntu常用命令大全(转)
  6. TextView文字排版问题:
  7. 百度全新的ARM架构服务器,一个2U机箱装6台,每台4个3T硬盘,每个机箱共72TB
  8. 利用PhantomJS搭建Highcharts export服务
  9. css3购物网站商品文字提示实例
  10. 大小写转换,split分割
  11. PHP中的错误处理
  12. SQL Server 索引维护sql语句
  13. Linux常用基础命令
  14. MySQL大小写敏感问题和命名规范
  15. 【UML 建模】UML入门 之 交互图 -- 时序图 协作图详解
  16. PowerDesigner15连接Oracle数据库并导出Oracle的表结构
  17. 20165234 《Java程序设计》第二周学习总结
  18. C#串口SerialPort常用属性方法
  19. asp相关知识整理
  20. Redis学习系列一Linux环境搭建

热门文章

  1. iPhone8、Note8、Mate10硬上面部识别:是潮流还是无奈
  2. python3.4多线程实现同步的四种方式
  3. Web 项目刚要打包,却找不到项目资源?
  4. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(11.2)- FlexSPI NOR连接方式大全(RT1060/1064(SIP))
  5. python爬虫-纠正MD5错误认知
  6. Vue-API之全局配置
  7. python数组和字符串互相转换
  8. 在ASP.NET Core Mvc 集成MarkDown
  9. 位运算基础(Uva 1590,Uva 509题解)
  10. JZOJ 1736. 扑克游戏 (Standard IO)