堆排序优化版Dijkstra
Dijkstra依旧基于贪心
用堆排序动态维护剩余点中dist[] 最小的点
堆排序优化Dijkstra算法 稀疏图,用邻接表,稠密也可以
void add(int a,int b,int c)
{
e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
void dijkstra()
{
memset(dis,0x3f,sizeof dis);
dis[1]=0;
//定义生成小根堆
priority_queue<PII ,vector<PII>, greater<PII>> heap;
heap.push({0,1}); //距离,编号
while(heap.size())
{
auto t=heap.top();//最小堆直接得到dist最小的节点
heap.pop();
int ver=t.second,distance=t.first;
if(st[ver]) continue;
st[ver] = true;
for(int i=h[ver];i!=-1;i=ne[i])
{
int j=e[i];
if(dis[j]>distance+w[i])
{
dis[j]=distance+w[i];
heap.push({dis[j],j});
}
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人