首页 > 其他分享 >【学习笔记】dijkstra

【学习笔记】dijkstra

时间:2024-04-10 21:35:18浏览次数:21  
标签:proirity queue 最小 笔记 学习 dijkstra 节点

一、dijkstra

1. 定义 & 作用

很简单。一个单源最短路算法。

2. 思想 & 实现

我觉得 sm 的图已经够了。















二、堆优化 dijkstra

1. 先来认识一下 proirity_queue








2. 如何使用 proirity_queue 对 dijkstra 优化?

每一步,我们都需要找到 \(d\) 值最小的节点(即 \(dis\) 值)以对其相邻节点进行松弛操作,而我们呢用了 proirity_queue 就可以快速找到 \(d\) 值最小的点了。

模板:

priority_queue<pii,vector<pii>,greater<pii> > q;
for(int i=1;i<=n;i++)
	dis[i]=inf;
dis[1]=0;
q.push({0,1});
while(!q.empty())
{
	pii now=q.top();
	q.pop();
	int mini=now.second;
	if(visit[mini]==1)continue;
	visit[mini]=1;
	for(int i=first[mini];i;i=e[i].next)
	{
		if(dis[mini]+e[i].w<dis[e[i].to])
		{
			dis[e[i].to]=dis[mini]+e[i].w;
			q.push({dis[e[i].to],e[i].to});
		}
	}
}

标签:proirity,queue,最小,笔记,学习,dijkstra,节点
From: https://www.cnblogs.com/WindChime/p/18127508

相关文章

  • 【学习笔记】spfa
    一、spfa模板:voidspfa(intx){ for(inti=1;i<=n;i++) vis[i]=0,dis[i]=inf; dis[1]=0,f[1]=1; q.push(1); while(!q.empty()) { intt=q.front(); q.pop(); vis[t]=0; for(inti=first[t];i;i=e[i].next) { intto=e[i].to; if(dis[t]+e[i].v<......
  • 【学习笔记】并查集
    一、普通并查集1.定义&作用并查集是管理元素分组的算法,可以高效对元素分组(合并为一组)以及查询两个元素是否在一组。2.主要思想&实现对于每一个组,设置一个“组长”,每一次合并时只需要将其中一组的组长设为另一组的组长,查询时只需要查询组长是否相同。每一个组都可以理解......
  • Bonnie++ 工具学习记录
    Bonnie++工具学习记录文章目录Bonnie++工具学习记录主要特点如何下载安装Bonnie++使用Bonnie++常见使用方式:基本使用:测试并生成报告。测试结果分析:主要使用场景Bonnie++是一款专门用于测试硬盘和文件系统性能的开源工具。它通过模拟各种文件操作来评估存储......
  • SQL SERVER 从入门到精通 第5版 第二篇 第9章 视图的使用 读书笔记
      第9章视图的使用视图是一种常用的数据库对象,它将查询的结果以虚拟表的形式存储在数据中,视图并不在数据库中以存储数据集的形式存在.视图的结构和内容是建立在对表的查询基础之上的,和表一样包括行和列,这些行,列数据都来源于其所引用的表,并且是在引用视图过程中动......
  • 《C++程序设计》阅读笔记【7-堆和拷贝构造函数】
    ......
  • 机器学习和深度学习--李宏毅(笔记与个人理解)Day9
    Day9LogisticRegression(内涵,熵和交叉熵的详解)中间打了一天的gta5,图书馆闭馆正好+npy不舒服那天+天气不好,哈哈哈哈哈总之各种理由吧,导致昨天没弄起来,今天补更!这里重点注意一下,这个output值是概率哈,也就是说式子整体表示的含义是x属于c1的概率是多大这个老师......
  • python初学者笔记(7)——求和函数总结
    python经常要用到各种求和,例如列表求和,元素求和,利用函数求和,将这些方法总结发给大家!1.python两个数的求和函数defsum_2_num(num1,num2):result=num1+num2returnresult#必须在执行行输入,函数命名后必须调用,调用sum_2_num(),或者print()#sum_2_num(10,20......
  • python学习之:数据类型
    大纲:一、列表list的定义语法1、""""演示数据类型:list列表语法:变量=[元素1,元素2,元素3,......]"""#定义一个列表listname_list=['itheima','itcast','python']print(name_list)print(type(name_list))#定义一个嵌套的列表statis......
  • python函数 学习第二部分
    函数大纲:六、函数说明文档#定义函数,进行文档说明defadd(x,y):"""函数说明:paramx:参数x表示其中一个加数:paramy:参数y表示另一个加数:return:返回两数相加的结果"""result=x+yreturnresultr=add(5,6)print(r)......
  • SQL SERVER 从入门到精通 第5版 第二篇 第8章 SQL数据高级查询 读书笔记
     第8章SQL数据高级查询 >.子查询与嵌套查询>.子查询概述:子查询是一个嵌套在SELECT,INSERT,UPDATE和DELETE语句或者其他子查询中的查询,任何允许使用表达式的地方都可以使用子查询.子查询语法规则如下:>.子查询的SELECT查询总使用圆括号......