对djkjstra的堆优化进行小结

本文是对Dijkstra算法堆优化的个人小结,探讨了dis数组的初始值设定为无穷大、优先队列应设为小根堆以及利用vis数组记录已访问节点等关键点,以实现O(nlogn)的时间复杂度。
摘要由CSDN通过智能技术生成

DJ堆优化不成熟的小结

dj算法是一个非常重要的算法。特别是堆优化之后的DJ,其时间复杂度可达O(nlogn)(单源)。DJ算法的基本操作在此就不详细讲述了。主要讲一下DJ堆优化的几点注意事项。

1.dis数组的初始值

dj算法相当于是贪心的算法,每次取蓝白点相连的边权的最小值,所以初始值应该为 无穷大

dis [ ] = INF;


2.priority_queue的设置

  • STL的堆默认是大根堆,所以应该是

priority_queue <int,vector,greater > q;

而不是

priority_queue q;

如果边权不为1,可以使用pair,make_pair,前面存边权,后面存点的编号。
或结构体

 bool opreator < ( node a ) const {
   //此处只能接'<'
	return u<a.u;//不变,'<'还是'<','>'还是'>';
	return u>a.u;//相反	
}

3.记得用vis标记走过的点

/*
    O(eloge)堆优化dj算法,在n的数量级>=1e5时必须采用这种堆优化+邻接表方式 
*/
struct node{
   
    int p,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值