首页 > 编程语言 >dij算法与小根堆

dij算法与小根堆

时间:2024-10-20 22:32:14浏览次数:6  
标签:松弛 dij val int 根堆 算法 出队 dis

dij即利用一个小根堆

每次取出队头元素,利用队头元素对其他点进行松弛

每当一个点出队,说明他已经是被最小元素松弛过,那么不可能有更优解,那么便打上标记

松弛时注意目标点是否已经出队,如果出队说明不能再被松弛

注意:dij只能用于没有负边的图内

复杂度为O(mlogm)

struct node
{
  int x,val;
  bool operator<(const node &x)const
  {
      return val>x.val;
  }
};


void dij(int s)
{
  priority_queue<node> q;
  for (int i = 1; i <= n; i++) dis[i] = 1e9;
  memset(vis, 0, sizeof(vis));
  dis[s] = 0;
  q.push(node{s,0});
  while (!q.empty())
  {
    int u = q.top().x;
    q.pop();
    if (vis[u]) continue;
    vis[u] = 1;
    for (int i = head[u]; i; i = nxt[i])
    {
      int v = to[i];
      if (dis[v] > dis[u] + val[i])
      {
        dis[v] = dis[u] + val[i];
        if (!vis[v]) q.push(node{v, dis[v]});
      }
    }
  }
  return;

 

 

标签:松弛,dij,val,int,根堆,算法,出队,dis
From: https://www.cnblogs.com/zbyQIN/p/18488074

相关文章

  • BBR算法: 在Kratos的实现
    什么是BBR?BBR(BottleneckBandwidthandRTT)最初是由Google开发的网络拥塞控制算法。在限流领域,BBR被改造用于自适应限流,通过动态调整并发请求数来平衡系统吞吐量和响应时间。BBR限流算法的核心思想BBR限流算法的核心思想是:持续监控系统的关键指标(CPU使用率、请求通......
  • 基于模糊控制算法的倒立摆控制系统simulink建模与仿真
    1.课题概述      对倒立摆模型进行模糊控制器simulink建模,利用倒立摆的摆角角度与小车的位置来控制小车的推力,控制了倒立摆的摆角问题,使得小车最终停在稳定的位置。 2.系统仿真结果                                        ......
  • 算法笔记-字符串算法集合(未完)
    这里有一些别样的学习思路。KMP用途模式串匹配过程我们分解\(O(nm)\)的算法过程。如图,红色竖线包括的为目前匹配成功的部分,对于下一位\(i\):首先,如果成功匹配,那么匹配长度加一。否则,我们考虑失配情况。我们会将\(S\)串的匹配部分左端点向右移动一位,然后\(T\)串......
  • 基于GWO灰狼优化的GroupCNN分组卷积网络时间序列预测算法matlab仿真
    1.算法运行效果图预览(完整程序运行后无水印) 2.算法运行软件版本matlab2022a 3.部分核心程序(完整版代码包含详细中文注释和操作步骤视频)a=2*(1-(t/Iters));fori=1:Numforj=1:dimr1=rand;r2=......
  • 代码随想录算法训练营 | 739. 每日温度,496.下一个更大元素 I ,503.下一个更大元素II
    739.每日温度题目链接:739.每日温度文档讲解︰代码随想录(programmercarl.com)视频讲解︰每日温度日期:2024-10-20想法:遍历一遍数组,用栈来存数组下标做记录,因为要找更高得温度,当当前遍历的温度大于栈头存储(存的下标)的温度时,就可以知道栈头要过多少天遇到高温,低的时候直接入栈。J......
  • 七、朴素贝叶斯算法
    朴素贝叶斯算法前言一、概念二、贝叶斯定理三、朴素贝叶斯分类器四、训练过程第一步:计算计算先验概率第二步:计算条件概率五、模型预测六、常见变体6.1高斯朴素贝叶斯(GaussianNaiveBayes):6.2多项式朴素贝叶斯(MultinomialNaiveBayes):6.3伯努利朴素贝叶斯(BernoulliNa......
  • 快速幂算法
    如何计算,(n是正整数),只需要将a*a*a*a......*a,但它的时间复杂度为O(n)。有什么办法可以快速解决这个问题,比如说:先通过:这个算法的本质是倍增原理比如说,105=1+8+32+64,所以可以写成,将它展开由于很容易计算,所以只需要将它们相乘就可以,但具体是如何实现的可以看见105的二......
  • 动态分层强化学习(DHRL)算法
    动态分层强化学习(DHRL)算法详解一、引言在强化学习(ReinforcementLearning,RL)领域,面对复杂、大规模的任务,传统方法往往面临诸多挑战,如高维度状态空间导致的“维数灾难”、长期依赖与稀疏奖励等问题。为了克服这些挑战,分层强化学习(HierarchicalReinforcementLearning,HR......
  • 微信小程序毕业设计-基于springboot+协同过滤推荐算法的成都美食分享系统设计和实现,基
    博主介绍:✌️码农一枚,专注于大学生项目实战开发、讲解和毕业......
  • 数据结构与算法
    数据结构:研究数据在内存中存储的结构算法:实现增删改查的方法解决问题的实际方法算法的好坏评价标准:时间复杂度和空间复杂度时间复杂度:算法所用时间的一个映射时间复杂度得出的是一个数学问题数据总量x(x足够大),从而消耗的执行次数y之间存在的关系LeetCode算法题......