自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 c++ dfs搜索算法——dfs基础&回溯

DFS(深度优先搜索)是一种优先沿路径深入探索的算法,采用"先深后广"策略,遇到死路则回溯。实现方式包括递归和栈模拟两种,常用于图/树遍历、组合问题及迷宫求解。DFS与回溯法关系密切,常通过构造搜索树解决问题,分为排列型(n!节点)和子集型(2^n节点)两种。文中以N皇后问题为例展示DFS应用,通过递归实现并标记皇后攻击范围,利用回溯恢复现场。此外还介绍了小朋友崇拜圈(求最大环)和全球变暖(岛屿淹没)问题的DFS解法,涉及时间戳和连通块染色等技巧。代码实现中注意输入处理、全局变量初始化和

2026-01-04 09:10:58 886

原创 2025年年度总结!!!!!!!!!!!!!!!!!!!!!!!!!!!

我在网上找呀找啊,找不到什么合适的资料,于是我决定看书学习,在淘宝上买了两本书,准备寒假开始干,这两本书似乎包含了嵌入式要学的所有基础内容,一本是《Arm64体系结构编程与实践》,另一本就是《基于arm的嵌入式Linux开发与应用》,我看了几篇,觉得还不错,也推荐给大家。从大一的迷茫开始,之后便进入到了c的“散修”,进入大二学校都在学Java,唯独我这个刺头学的是c++,可能是当时认为Java比较卷吧,我觉得c++可能会相对来说好一点,于是我进入了c++的语法学习当中,每一篇都写了详细的笔记。

2025-12-31 23:58:56 1256 5

原创 c++图论——生成树之Kruskal&Prim算法

本文介绍了最小生成树(MST)的概念和两种经典算法:Kruskal和Prim。MST指连通图中边权和最小的生成树,具有边权和最小、最大边权最小等性质。Kruskal算法通过排序边并查集实现,时间复杂度O(mlogm);Prim算法采用优先队列维护最小边,时间复杂度O(mlogn)。文章以蓝桥杯旅行销售员问题为例,详细解析了两种算法的代码实现,强调Kruskal需边排序和并查集判断连通性,Prim通过优先队列选择最小边。两种算法均能求解MST中最大边权问题,适用于不同场景的无向图处理。

2025-12-29 18:01:22 1144

原创 c++图论——最短路之Johnson算法

本文介绍了三种最短路算法:Dijkstra(正权图单源最短路)、Floyd(正权图全源最短路)和Bellman-Ford(可处理负权图及判断负环)。重点讲解了Bellman-Ford算法的原理与实现,包括n-1次松弛操作的迭代过程。随后详细介绍了Johnson算法,该算法通过建立超级源点、利用Bellman-Ford计算势能h[]、重新赋权边权使其非负,最后通过n次Dijkstra计算全源最短路。文章还通过蓝桥杯例题展示了Johnson算法的实际应用,包括负环判断、势能计算和距离还原等关键步骤。

2025-12-28 18:00:24 819

原创 c++图论————最短路之Floyd&Dijkstra算法

本文介绍了两种经典的最短路径算法:Floyd算法和Dijkstra算法。Floyd算法适用于稠密图,通过动态规划思想计算所有点对之间的最短路径,时间复杂度O(n^3)。Dijkstra算法采用堆优化版本处理单源最短路径问题,时间复杂度O(nlogn),适用于非负权图。文章结合蓝桥杯真题(蓝桥公园和蓝桥王国)进行代码实现和解析,详细说明了两种算法的核心思想、实现细节和适用场景,包括邻接矩阵/邻接表的存储方式、负环处理、优先队列优化等关键知识点。最后强调了算法选择应根据图的稠密度和问题需求进行权衡。

2025-12-22 15:50:22 1006

原创 c++图论——基础拓扑排序

本文介绍了拓扑排序算法及其应用。首先解释了拓扑排序的基本概念,即对有向无环图进行线性排序,确保每个节点的前驱节点都排在前面。然后详细讲解了两种实现方法:普通拓扑排序算法(基于BFS和队列)以及与动态规划结合的DAG-DP算法。最后以蓝桥杯"走多远"题目为例,展示了如何利用拓扑排序解决实际问题,通过状态转移方程dp[y]=max(dp[y],dp[x]+1)计算最长路径距离。文章包含完整的代码实现和详细解析,所有题目均来自蓝桥杯官网真题。

2025-12-21 00:02:36 463

原创 c++图论————图的基本与遍历

本文介绍了图论的基础概念和常用算法。主要内容包括:1.图的基本术语(结点、边、度数、权重等)和分类(有向/无向图、完全图、连通图);2.两种存储方式(邻接表和邻接矩阵)及其适用场景;3.图的遍历算法(DFS和BFS)的实现原理与代码示例;4.两个典型例题解析:(1)帮派地位问题:通过DFS计算子树大小并排序;(2)可行路径方案数问题:使用BFS结合动态规划统计最短路径数。文章结合代码示例详细说明了算法实现过程,并解释了关键步骤的设计思路。

2025-12-18 18:09:39 894

原创 c++单调数据结构————单调栈,单调队列

本文介绍了单调栈和单调队列两种数据结构及其应用。单调栈保持元素单调性,可用于求解左右第一个更大/更小元素的位置,如百亿富翁问题中求解楼房左右第一个更高楼栋。单调队列维护滑动窗口的最值,如分蛋糕问题中统计满足高度差条件的连续蛋糕序列概率。两题均来自蓝桥杯真题,通过详细代码解析展示了数据结构的具体实现与应用场景。

2025-12-16 22:56:24 817

原创 C++树形数据结构————树状数组、线段树中“逆序对”的问题

本文分享了蓝桥杯官网三道关于逆序对的经典题目,重点解析了使用树状数组和线段树求解逆序对问题的方法。第一题展示了树状数组+离散化和线段树+离散化两种解法,第二题对比了暴力解法和树状数组解法,第三题则通过巧妙转化将问题转化为带权逆序对求和,并详细说明了如何用两个树状数组分别维护元素个数和元素值之和来高效计算答案。文章提供了完整的代码实现和详细注释,帮助读者深入理解逆序对问题的多种解法。

2025-12-14 16:06:03 363

原创 c++树形数据结构————深入了解线段树上二分,主席树的前置知识!

本文介绍了线段树二分算法及其应用。首先解释了线段树二分的基本概念,它作为主席树的前置知识,主要用于维护集合中第k小元素。通过权值线段树保证查询效率,每次根据左子树权值决定查询路径。接着以集合{1,1,5,2,2,8,6}为例,演示了如何在线段树上查询第6小元素的过程。最后通过蓝桥杯"热身操领队"问题展示了实际应用,该问题需要动态维护学生身高并快速查询中位数。文章提供了两种解法:线段树二分和树状数组+二分,均采用离散化处理大范围数据,并详细解释了代码实现和注意事项。

2025-12-08 17:39:27 760 1

原创 c++树形数据结构——线段树,深入讲解c++算法最重要的数据结构之一!

线段树是一种高效维护区间信息的数据结构,采用二叉树结构将区间操作的时间复杂度优化至O(logN),适用于区间最值、区间和等查询。核心操作包括建树、区间修改和查询,其中懒标记(Lazy Tag)技术通过延迟处理实现高效区间更新。建树从根节点递归构建,修改和查询时需先下放懒标记再处理子节点。注意除法等非线性操作不适合使用懒标记。例题展示了如何用线段树实现区间修改和求和,体现了其处理大规模数据的高效性。

2025-11-16 16:17:46 747

原创 c++树形数据结构——树状数组,算法必看哟!!!

以最浅显易懂的语言深入讲解树状数组,配有例题加强练习(有代码详解)!参加算法比赛或对算法感兴趣的兄弟集美必看哟!

2025-11-12 17:54:30 672

原创 c++基础树上问题——求lca(最近公共祖先)的几种方法,算法必看哟!

详细解释c++数据结构树中的求lca最近共工作祖先的方法以及相关例题详解,适合参加算法比赛和对算法感兴趣的人!

2025-11-08 19:59:42 1042

原创 c++基础树上问题——dfs序,算法必看!

详细解释c++的dfs序加例题训练,适合参加算法比赛或对算法感兴趣的兄弟集美

2025-11-06 18:50:27 802

原创 c++基础树上问题————树上差分:万字泣血!超强解析,一篇就会,无需多言,适合小白,附有例题加强训练!

详细解释c++的树上差分问题,适合参加算法比赛的同学!

2025-11-03 17:41:28 469

原创 c++基础树上问题————树与图的直径及重心:算法精解与实战,适合小白哟!

树的重心:是指对于某个点,将其删除后可以使得剩余联通块的最大值最小的点等价于:以某个点为根的树,将根删除后,剩余的若干个子树的大小的最大值最小另一种说法:或是其他点到该点的权值之和最小(下面不提了)用mss[x]表示x点的所有子树的大小的最大值(就是子树所含节点的最大值)性质:1,重心的若干子树的大小一定<=n/2. n:总结点。除了重心以外的所有其他点,都必然存在一棵节点个数>=n/2的子树。

2025-10-28 19:57:59 888

原创 c++基础树上问题——树的基本知识点总结及遍历方式代码详解

二叉搜索树是 “具有有序性” 的二叉树,其左、右子树满足:对于树中的任意一个节点,其左子树中所有节点的值都小于该节点的值,其右子树中所有节点的值都大于该节点的值(若存在相等值,需根据具体规则定义,通常不允许重复值或规定重复值在右子树)。对于二叉树(m=2),该式简化为n0 = n1 + 2n2 + 1,进一步可推导:若二叉树中没有度为 1 的节点(n1=0),则叶子节点数 = 度为 2 的节点数 + 1(即n0 = n2 + 1),这是二叉树问题中最常用的推论之一。一、树的定义与基本概念​。

2025-10-26 16:31:35 761

原创 c++基础数据结构,竞赛算法题的常客————并查集,看这一篇就足够了!!!

1,介绍并查集并查集是一种图形数据结构,用于存储图中节点的连通关系。每个节点都有一个父亲可以理解为“一支伸出去的手”,会指向另外一个点,初始时指向自己一个点的根节点是该点的父亲的父亲的……的父亲,直到某个节点的父亲是自己(根),当两个节点相同时,我们就说他们是属于同一类,或者说是连通的。如下:7--->5--->1--->3<---6 4--->27 5 1 3 6 d的根都是3,所以他们是连通的,2 6不连通,因为他们的根不同。

2025-10-25 20:04:57 719

原创 c++数据结构——————st表:优化区间最值查询

就是分成了两个区间:[i,i+2^j-1]----->[i,i+2^(j-1)-1],[i+2^(j-1),i+2^j-1]状态转移方程为:st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);max(st[l][k],st[r-2^k+1][k])就是分解为两个长度相同的并且为2的次方长度的区间!可以分解为:[2,2+2^2-1],[7-2^2+1,7]的最大值(两个区间长度均为4,为2的次方)也就是max(st[2][2],st[7-4+1][2])

2025-10-23 20:27:42 323

原创 c++数据结构————堆,一篇给你讲清楚!

节点x的左子节点为x << 1(即2x),右子节点为x << 1 | 1(即2x+1)。左移补0乘以2,右移补符号位除以2!// 我们采用数组的方式来存储数据,利用二叉树的性质:2x表示x的儿子编号,2x+1表示x的右儿子编号。//堆是一种二叉树,其满足:儿子的权值都比自己的权值小(大根堆)或相等或大(小根堆)// 这个性质不断向上传递直到根,保证根的权值是整棵树中最大的/最小的!若当前节点值大于父节点,则交换两者,并继续向上调整(更新x为父节点)。节点x的父节点为x >> 1(即x/2)。

2025-09-28 17:03:17 307

原创 c++ 染色问题——排列组合专项训练一道题

A∩B具有强规律性,只需要考虑其中的一行和一列相交的左上角部分即可,因为A∩B的行和列都满足交替排列,其中一列和一行确定了,剩下的也会确定。但是,在选定第一行的两个元素交替排列后,对于任意一行,都可以进行翻转排列,每一行都有2种交替排列的方式,所以有C(4,2)*2^n。因为行主导是行内部进行交替排列,在列上是不一定满足交替排列的,同理列主导是满足列上交替排列,在行上不一定满足行上交替排列。由组合数学,A或B的组合种数等于A的组合种数加上B的组合种数再减去A和B共同出现的组合种数。

2025-09-27 19:31:50 353

原创 C++ stl初步(三)set,map 完结篇

函数:insert(x) erase(x) find(x)查找元素 lower_bound(x) upper_bound(x)map使用红黑树(red_black tree),数据结构来实现,具有较快的插入,删除,查找操作的时间复杂度o(logN)map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一(不相同)的。set中的元素是唯一的,即不允许重复的元素在,当插入一个重复元素时,set会自动忽略该元素。用于存储一组唯一的元素,没有特定的顺序。

2025-09-22 16:43:10 945

原创 队列的应用——蓝桥杯官网:机器翻译

【代码】队列的应用——蓝桥杯官网:机器翻译。

2025-09-21 17:30:44 156

原创 C++ stl初步(二):list,stack,queue

它基于现有的 STL 容器(默认是 deque)实现,遵循 “先进后出”(First In Last Out,FILO)的数据操作规则,就像日常生活中堆叠的盘子,只能从顶端放入(压栈)和取出(弹栈)元素,无法直接访问栈中间或底部的元素。list容器的特点:1,双向性,每个节点都包含指向前一个节点和后一个节点的指针,因此可以在数时间内在链表中的任意位置进行插入,删除和访问操作。deque是由一系列连续的存储块(缓冲区)front(),back()返回头/尾部元素 emrty() size() 均为o(1)

2025-09-21 15:57:40 547

原创 c++ 数据结构:栈的运用——模板题:括号串

这种题的解法有两种,一种用数组,另一种使用stl。

2025-09-19 22:10:58 214

原创 双向链表的应用————蓝桥杯官网题目:重新排队

给定按从小到大的顺序排列数字1到n,随后将他们进行n次操作,操作完后输出这m次操作后他们的顺序。第二行到第m+1行,每行3个数x,y,z。当z=0时,将x移动到y之后;当z=1时,将x移动到。第一行为两个数字n,m,表示初始状态为1到n的从小到大排列,后续有m次操作。由于涉及到前后关系,这里采用双向链表的数组形式。

2025-09-18 20:49:16 138

原创 c++ stl初步(一):pair,vector

这意味着当你使用标准库中的排序算法(如 std::sort)对包含pair的对象的容器进行排序时,会根据pair的对象的first成员进行排序。首先,对vector中的元素进行排序,然后unique将重复的元素移到vector的末尾,并返回一个指向重复元素的。注意:unique并不会改变向量的物理大小,只是将不重复的元素排列在前部,重复元素被移动到后部。该函数会将相邻的重复元素移动到向量末尾,并返回一个指向新的逻辑末尾的迭代器last。最终向量的大小变为 5,内容为{ 1,2,3,4,5 }。

2025-09-18 18:57:59 412

原创 2024年年度总结以及一些思考(禁止转载)

我也有我热爱的音乐,热爱的技术,热爱的极限运动(我曾轮滑比赛拿过奖),我也可以利用自己的爱好和技术,去创造更有意义的东西。先做个自我介绍,我是李同学(真名我就不说了),今年19岁,来自长沙新办本科院校长沙工业学院的计算机专业,至于为什么要写这个年度总结,只是因为2024这一年有些不平凡的事情值得我记录下来,并且可以对我之后起到一定的督促作用。高考,让我懂得合理的规划,合理地利用时间才是王道,让我懂得从事物的本质去思考问题,让我懂得一个强大心理的重要性,让我懂得基本能力的重要性。

2024-12-31 23:06:50 522

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除