最短路之含负权边(bellman-ford+spfa+Floyd)学习笔记 (模板+OJ题目供读者自测)
前言与模板 需要读者对最短路之不含负权边:Dijkstra算法朴素和堆实现 有所了解。 1、bellman-ford 适用情况: 与拓展次数有关 可用于负权。因为有次数限制,所以可以有负环(负权回路) 简要介绍: 暴力法。每次大循环的含义是向外拓展一次,每次大循环将所有的边遍历一次。 模板: //循环k次(拓展k次边) 每次循环尝试更新所有的节点最…
Dijkstra学习笔记(模板+acwing上的题)
前言和模板 参考文档 第一次接触$Dijkstra$是在大一下复习数据结构期末考试看了下思路。现在刚开始大二下,打卡群写kuangbin专题最短路不得不学下$Dijkstra$🤣,事实证明(1)我很懒(2)人的潜力不容小觑,我曾以为自己永远也看不懂与图相关的算法。 再说下$Dijkstra$的适用前提: 带权图的最短路径 权值都为非负值 单点出发到…
STL 拓扑排序
视频讲解 前言 我与拓扑排序的故事 一开始接触是数据结构的课上、奈何那段时间沉迷玩游戏没有理解过代码。第二次是打卡群,一场力扣双周赛第二题是拓扑排序(我是暴力循环100次、哈希去重写的),群主发觉群员拓扑排序学的不行写拓扑专题。y总数组模拟数据结构、我看了还是不会啊🤣连续两天不会写、痛失20块。(我到现在也还不会y总的数组写法🤣。 后来寒假开始打卡…
STL优先队列实现堆(模板 附力扣题目)
讲解视频:https://www.bilibili.com/video/BV12i4y1f7ky/ 堆的本质 堆是一种特殊的完全二叉树。每一个节点的值都大于等于或者小于等于其孩子节点的值。 堆的操作时间复杂度如下: 插入:$O(log_n)$ 删除:$O(log_n)$ 获取最大/最小值:$O(1)$ 堆的分类(大根堆、小根堆) 大根堆 数据结构(…
BFS在矩阵中的简单应用(单源 多源)
配套视频:https://www.bilibili.com/video/BV1Su41197rq?spm_id_from=333.999.0.0 模板 BFS有强烈的“步数”意识。每一步的搜索向外扩展一层。 BFS的核心是搜索:让每个点向所有可能的方向搜索。 核心模板如下(带注释) while(q.size()) { int len = q.siz…
递归(带例题)
1.什么是递归 一个函数调用它本身就是递归。递归通常把一个大型复杂的问题层层转化为子问题,直到到子问题无需进一步递归就可以解决的地步。递归极大地降低了代码量。 通常来讲一个递归算法由以下部分组成: 能够不使用递归来产生答案的终止方案 可将所有其他情况拆分到基本案例 2.递归的作用 递归算法在以下情况下有着很大的作用: 数据的定义是按递归定义的 问题…
结构体与函数
1. 结构体 1.1. 为什么有结构体 数组只能存储相同类型数据项的变量,实际生活中一类物体的各个数据参数类型大概率不相同。结构体使我们描述物体更加全面准确。 1.2. 什么是结构体 结构体是一种用户自定义的可用的数据类型,它允许用户存储不同类型的数据项。 举个例子,我们定义一个学生数据类型,这个类型包含该学生的年龄、身高、体重、名字。用C语言表示…
浅谈状态压缩(带例题,由易到难)
浅谈状态压缩 总览 状态压缩是什么 别名“二进制枚举”,核心是枚举。即将所有的情况枚举出来后对每种情况进行单独的讨论。对于每一个下标我将其称作 “非黑即白”(在某一情况中要么出现要么不出现)。 可以将其看作对数据范围小的布尔数组的压缩。但由于有位运算,使状态压缩操作起来比布尔数组简洁。(状态压缩能做的事情布尔数组都能做、只是写起来繁琐) 为什么能用…
单调栈的使用(带例题、由易到难)
前言 这篇文章用三道例题解释下单调栈 单调栈是什么 栈里的元素 严格或非严格 单调递增或递减 实现时要维护栈内的元素有序 例题一 Acwing1978(简单) 题目链接 https://www.acwing.com/problem/content/description/1980/ 题目 每天,农夫约翰的 N头奶牛都会穿过农场中间的马路。考虑约翰的…
分页查询
limit的使用 作用是 偏移+限制长度 mysql> select * from user; +----+-------------+-----+-----+ | id | name | age | sex | +----+-------------+-----+-----+ | 4 | zhang san | 20 | M | | 5 |…