dijkstra堆优化

本文探讨了在求解单源最短路径问题时,Dijkstra算法的堆优化技术。作者指出,堆优化后的Dijkstra算法在效率上优于Bellman-Ford和SPFA算法。文章着重介绍了Dijkstra堆优化的实现,并提供了相关代码,但前提读者应熟悉Dijkstra算法、快速输入、STL及链式前向星等基础知识。
摘要由CSDN通过智能技术生成

再求单源最短路径时,算法有优劣之分,个人认为在时间方面 朴素dijkstra>bellmanford>SPFA>dijkstra+heap,所以掌握dijkstra堆优化对于OIER是必要的。

本文主要解说迪杰斯特拉堆优化的板子以及它所用到的知识;dijkstra算法、快读、stl以及链式前向星请自行百度或者看我的其他文章。

代码如下,注释个人觉得已经很清楚了。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int cnt=0;//边的序号 
int dis[5000010],vis[5000010],h[5000010];//dis:起点到该点的长度   vis:是否访问过了   h:起点为h[?]的暂存平台 
struct node//next:下一个连接某个点的下一条边   to:该边指向的下一条边   val:边权 
{
	int next,to,val;
	//int from; from在链式前向星的遍历里意义不大 
}edg[5000010];
struct heapnode//重载小根堆,让大根堆变成小根堆 
{
	int num,dist;//num:标号   dist:距离 
	bool operator<(heapnode t) const//记住这种特殊写法就可以了 
	{
		return dist>t.dist;//与sort相反,此处为从小到大 
	}
};
priority_queue<heapnode>q;//定义一个heapnode形式的优先队列q 
int cread()//快读 
{
	int f=1,x=0;
	char c=getchar();
	while(c<&#
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值