<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Xiaochen_12的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Xiaochen_12</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Xiaochen_12]]></copyright><item><title><![CDATA[染色法判定二分图]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/155012163</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/155012163</guid><author>Xiaochen_12</author><pubDate>Wed, 19 Nov 2025 08:48:04 +0800</pubDate><description><![CDATA[本文介绍了如何判断无向图是否为二分图，并提供了高效的实现方法。二分图是指顶点可被分为两个互不相交的子集，且每条边连接不同子集的顶点。关键性质是二分图中不存在奇数长度的环。文章详细解释了染色法的原理：通过DFS或BFS给顶点交替染色（颜色1和2），若相邻顶点颜色相同则存在冲突，说明不是二分图。给出C++代码实现，使用邻接表存储图，时间复杂度为O(n+m)。示例测试验证了算法的正确性，适用于大规模数据（n,m≤10^5）。这种方法在任务分配、社交网络分析等场景有广泛应用。]]></description><category></category></item><item><title><![CDATA[Kruskal算法求最小生成树]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/155011936</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/155011936</guid><author>Xiaochen_12</author><pubDate>Wed, 19 Nov 2025 08:38:02 +0800</pubDate><description><![CDATA[本文详细介绍了Kruskal算法求解最小生成树问题的方法。该算法通过贪心策略，按边权排序后逐步选择边并使用并查集检测环，确保生成树的权重和最小。文章包含算法原理、C++代码实现及详细注释，通过示例演示了算法过程，并分析了时间复杂度和边界条件。Kruskal算法特别适合稀疏图，时间复杂度为O(mlogm)，是网络优化等场景下的高效解决方案。理解该算法有助于解决类似连通性优化问题。]]></description><category></category></item><item><title><![CDATA[Prim算法求最小生成树]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154981268</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154981268</guid><author>Xiaochen_12</author><pubDate>Tue, 18 Nov 2025 10:22:46 +0800</pubDate><description><![CDATA[本文详细讲解了Prim算法求解最小生成树问题。最小生成树(MST)是图论中的重要概念，用于解决网络设计等优化问题。文章首先比较了Prim和Kruskal算法的适用场景：Prim适合稠密图(O(n²))，Kruskal适合稀疏图(O(m log m))。核心思想是通过贪心策略逐步扩展已选点集S，每次添加距离S最近的点并更新距离。代码实现采用邻接矩阵存储，处理重边并判断连通性，时间复杂度O(n²)。文章还提供了堆优化建议(降至O(m log n))和边界测试技巧，强调理解集合扩展、距离更新和连通性判定三个关键点]]></description><category></category></item><item><title><![CDATA[Floyd求最短路]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154980840</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154980840</guid><author>Xiaochen_12</author><pubDate>Tue, 18 Nov 2025 10:04:47 +0800</pubDate><description><![CDATA[Floyd算法是一种高效解决多源最短路径问题的动态规划算法。本文详解了该算法的原理与实现，特别适用于存在负权边但无负权回路的有向图场景。通过三重循环逐步扩展中转点，算法能在O(n³)时间内计算出所有顶点间的最短路径。文章提供了完整的C++实现代码，包含初始化、重边处理、动态更新等关键步骤，并通过示例演示算法执行过程。Floyd算法虽然时间复杂度较高，但代码简洁，能直接获取全局最优解，是处理中小规模图最短路径问题的理想选择。]]></description><category></category></item><item><title><![CDATA[spfa算法：求最短路 & 判断负环]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154901620</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154901620</guid><author>Xiaochen_12</author><pubDate>Sun, 16 Nov 2025 09:13:55 +0800</pubDate><description><![CDATA[SPFA算法是一种高效处理带负权边的最短路径算法，通过队列优化Bellman-Ford算法，避免无效计算。其核心思想是动态更新：仅当节点距离被缩短时才入队处理，显著提升效率。算法流程包括初始化距离数组、队列管理待处理节点、松弛操作等关键步骤，平均时间复杂度为O(m)。与Dijkstra算法不同，SPFA能处理负权边，但需注意负权回路的检测。代码实现采用邻接表存储，配合状态标记数组避免重复入队。该算法适用于网络路由、物流规划等场景，是解决带负权边最短路问题的优选方案。]]></description><category></category></item><item><title><![CDATA[有边数限制的最短路：Bellman-Ford 算法]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154867043</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154867043</guid><author>Xiaochen_12</author><pubDate>Sat, 15 Nov 2025 09:04:05 +0800</pubDate><description><![CDATA[本文解析了有边数限制的最短路问题及其解决方案。针对快递员在复杂路网中最多经过k条边的场景，介绍了Bellman-Ford算法的核心思想：通过k次迭代构建分层最短路径，使用状态备份防止更新串联，并能处理负权边。文章详细解释了算法实现的关键细节，包括备份的必要性、INF/2判断条件以及负权回路的天然规避，提供了完整的C++代码实现，并给出调试技巧和变式思考。该算法时间复杂度为O(k×m)，适合题目限制范围，是解决这类特殊最短路问题的有效方法。]]></description><category></category></item><item><title><![CDATA[Dijkstra求最短路 II]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154865848</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154865848</guid><author>Xiaochen_12</author><pubDate>Sat, 15 Nov 2025 08:55:01 +0800</pubDate><description><![CDATA[本文详细介绍了堆优化Dijkstra算法在求解稀疏图最短路径问题中的应用。针对包含150,000个节点和边的物流网络问题，文章对比了传统算法与堆优化版本的关键差异，重点阐述了邻接表存储结构和优先队列的动态更新策略。通过代码实现解析，展示了如何使用C++实现该算法，包括数据结构设计、邻接表构建和核心算法流程。复杂度分析表明，堆优化将时间复杂度从O(n²)降至O((n+m)logn)，极大提升了处理大规模稀疏图的效率。文章最后提出了关于负权边和进一步学习方向的思考题，鼓励读者实践应用该算法解决实际问题。]]></description><category></category></item><item><title><![CDATA[Dijkstra求最短路 I]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154820100</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154820100</guid><author>Xiaochen_12</author><pubDate>Fri, 14 Nov 2025 08:53:32 +0800</pubDate><description><![CDATA[本文介绍了Dijkstra算法求解单源最短路径问题。该算法适用于边权为正的稠密图，采用贪心策略：从起点开始，逐步扩展未访问点，每次选择当前距离最小的点并更新其邻居的距离。文章详细解析了算法思想、邻接矩阵存储方式、时间复杂度分析（O(n²)），并提供了完整的C++实现代码，包括初始化、距离更新和不可达处理。通过城市配送的生动示例，直观展示了算法执行过程，最后指出该算法在网络路由、机器人规划等领域的广泛应用价值。]]></description><category></category></item><item><title><![CDATA[有向图的拓扑序列]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154819685</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154819685</guid><author>Xiaochen_12</author><pubDate>Fri, 14 Nov 2025 08:40:02 +0800</pubDate><description><![CDATA[本文详细介绍了有向无环图(DAG)的拓扑排序算法。算法通过维护节点入度数组，先将所有入度为0的节点入队，然后依次处理队列中的节点，更新邻接节点入度，最终生成拓扑序列或检测环的存在。文章提供了C++实现代码，采用邻接表存储图结构，时间复杂度为O(n+m)。拓扑排序适用于任务调度、课程安排等场景，算法能有效检测图中环是否存在。]]></description><category></category></item><item><title><![CDATA[树与图的广度优先遍历：图中点的层次]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154772564</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154772564</guid><author>Xiaochen_12</author><pubDate>Thu, 13 Nov 2025 09:22:13 +0800</pubDate><description><![CDATA[本文介绍了如何使用广度优先搜索（BFS）在有向图中寻找最短路径。当图中所有边的长度均为1时，BFS能够有效地通过逐层探索找到起点到终点的最短距离。文章详细解释了BFS的原理及其优势，并提供了一个完整的C++代码实现。代码使用邻接表存储图结构，通过队列实现BFS遍历，记录每个节点的最短距离。文中还通过具体示例演示了算法执行过程，强调了BFS在处理单位边权图时的效率和可靠性。该方法时间复杂度为O(m)，适合处理大规模数据，是解决此类最短路径问题的理想选择。]]></description><category></category></item><item><title><![CDATA[树与图的深度优先遍历：树的重心]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154770986</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154770986</guid><author>Xiaochen_12</author><pubDate>Thu, 13 Nov 2025 09:12:31 +0800</pubDate><description><![CDATA[本文介绍了树的重心概念及其查找算法。树的重心指移除后能使剩余连通块最大节点数最小的节点，类似于积木塔中最关键的平衡点。通过深度优先搜索(DFS)遍历树结构，计算每个节点的子树大小及移除后的最大连通块，最终确定重心。算法时间复杂度O(n)，空间复杂度O(n)，适用于树结构平衡分析、网络关键节点识别等场景。文章包含算法思路、伪代码、C++实现及复杂度分析，展示了DFS在树结构分析中的高效应用。]]></description><category></category></item><item><title><![CDATA[BFS广度优先搜索：走迷宫 & 八数码]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154723684</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154723684</guid><author>Xiaochen_12</author><pubDate>Wed, 12 Nov 2025 09:32:50 +0800</pubDate><description><![CDATA[迷宫与八数码问题的最短路径解法 迷宫最短路径问题 采用BFS算法解决n×m迷宫的最短路径问题，核心要点： 使用队列实现逐层遍历，首次访问即最短路径 方向向量实现四方向移动检测 距离数组d[N][N]兼作访问标记 时间复杂度O(nm)，空间复杂度O(nm) 八数码问题解法 同样基于BFS算法： 将3×3拼图状态编码为字符串 通过交换x与相邻数字生成新状态 使用队列和哈希表记录访问状态及步数 检查逆序数可预先判断可解性 确保找到最少交换次数或无解(-1) 两问题均体现了BFS在无权图最短路径问题中的高效性。]]></description><category></category></item><item><title><![CDATA[DFS深度优先遍历：排列数字 & n-皇后问题]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154677408</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154677408</guid><author>Xiaochen_12</author><pubDate>Tue, 11 Nov 2025 09:03:37 +0800</pubDate><description><![CDATA[本文介绍了两种经典问题的DFS回溯解法：全排列问题和n-皇后问题。对于全排列问题，采用递归DFS逐位填充数字，通过标记数组避免重复选择，并在回溯时恢复状态。时间复杂度为O(n×n!)，空间复杂度O(n)。n-皇后问题则通过逐行或逐格放置皇后，利用三个辅助数组检测列和对角线冲突，确保合法解。两种方法均体现了DFS回溯的核心思想：递归探索、路径记录、状态标记和回溯恢复。这些算法在枚举类问题中具有广泛应用价值。]]></description><category></category></item><item><title><![CDATA[模拟散列表 & 字符串哈希]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154635301</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154635301</guid><author>Xiaochen_12</author><pubDate>Mon, 10 Nov 2025 09:34:42 +0800</pubDate><description><![CDATA[本文介绍了两种高效数据结构实现方法：散列表和字符串哈希。 散列表部分详细讲解了拉链法和开放寻址法两种冲突处理策略。拉链法通过链表存储冲突元素，实现简单；开放寻址法则通过线性探测查找空位，查询速度更快。两种方法均采用质数大小的哈希数组，并提供了完整的C++实现代码，包括插入和查询操作。 字符串哈希部分阐述了基于P进制数的快速子串比较技术。通过预处理前缀哈希和幂数组，可以在O(1)时间内计算任意子串哈希值，极大提升字符串比较效率。文中给出了数学推导和代码实现，并分析了时间复杂度和典型应用场景。 ]]></description><category></category></item><item><title><![CDATA[堆排序 & 模拟堆]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154597725</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154597725</guid><author>Xiaochen_12</author><pubDate>Sun, 09 Nov 2025 09:20:21 +0800</pubDate><description><![CDATA[本文介绍了堆排序算法及其应用，特别适合高效提取数列中前m小的数。堆是一种完全二叉树，分为小根堆和大根堆，核心操作包括down和up函数实现堆调整。构建堆的时间复杂度为O(n)，提取前m小数的复杂度为O(m log n)。代码实现展示了堆排序的完整流程，并分析了其优缺点。此外，文章还探讨了支持按插入顺序删除与修改的&quot;模拟堆&quot;操作，通过引入ph[]和hp[]辅助数组建立双向映射关系，详细解释了堆交换heap_swap和下沉操作down的实现原理，为处理复杂堆操作提供了有效解决方案。]]></description><category></category></item><item><title><![CDATA[并查集：连通块中点的数量 & 食物链]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154560316</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154560316</guid><author>Xiaochen_12</author><pubDate>Sat, 08 Nov 2025 09:27:54 +0800</pubDate><description><![CDATA[本文介绍了两种基于并查集的高效算法应用。第一部分实现了图的连通块操作，支持动态添边及查询连通性和连通块大小，通过父节点数组和大小数组维护，结合路径压缩优化性能。第二部分解决动物王国食物链问题，引入距离数组和模3运算来判定动物间捕食关系，巧妙处理环形食物链中的真假语句判断。两种应用均体现了并查集在处理动态关系问题上的优势，通过优化操作实现近乎常数时间复杂度。]]></description><category></category></item><item><title><![CDATA[并查集之合并集合]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154520067</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154520067</guid><author>Xiaochen_12</author><pubDate>Fri, 07 Nov 2025 09:20:58 +0800</pubDate><description><![CDATA[并查集是一种高效处理集合合并与查询的数据结构，通过树结构表示集合，利用路径压缩优化性能。核心操作包括合并集合（Union）和查询元素所属集合（Find）。典型应用是判断图中节点的连通性。本文详细介绍了并查集的实现原理、路径压缩优化技巧及其时间复杂度分析，并通过C++代码演示了具体应用，最后给出示例说明其运作过程。这种数据结构在图论和连通性问题中具有重要作用。]]></description><category></category></item><item><title><![CDATA[Trie树：最大抑或对]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154519801</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154519801</guid><author>Xiaochen_12</author><pubDate>Fri, 07 Nov 2025 08:54:00 +0800</pubDate><description><![CDATA[本文详解了最大异或对问题：给定N个整数，找出两个数异或后的最大值。直接暴力解法时间复杂度O(N²)，难以处理大规模数据。文章提出使用Trie树优化，将数字按二进制位从高位到低位存储，在查询时优先选择相反位以最大化异或值。算法时间复杂度优化为O(NlogC)，其中C为数字位数（如31位）。给出了清晰的C++实现，包括Trie构建、查询过程和复杂度分析。该方法巧妙结合贪心策略和数据结构，高效解决大规模异或问题。]]></description><category></category></item><item><title><![CDATA[Trie：字符串统计]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154474846</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154474846</guid><author>Xiaochen_12</author><pubDate>Thu, 06 Nov 2025 09:07:55 +0800</pubDate><description><![CDATA[Trie树是一种树形数据结构，用于高效存储字符串集合。每个节点代表一个字符，从根节点到叶节点的路径表示一个完整字符串。节点通过儿子指针（son数组）连接，共享公共前缀，减少重复存储。例如，存储"a"和"aab"时，"a"前缀被共享。查询时，从根节点向下遍历，如果路径存在且结束标记（cnt数组）非零，则字符串存在。关键优势前缀共享：避免重复存储公共前缀，节省空间。高效查询：查询时间与字符串长度成正比，不受集合大小影响。如图，红色星号表示存在到它为止的字符串，图中存的字符串有。]]></description><category></category></item><item><title><![CDATA[KMP字符串匹配]]></title><link>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154474364</link><guid>https://blog.youkuaiyun.com/Xiaochen_12/article/details/154474364</guid><author>Xiaochen_12</author><pubDate>Thu, 06 Nov 2025 08:47:09 +0800</pubDate><description><![CDATA[本文介绍了KMP算法在字符串匹配中的应用。给定主串S和模式串P，KMP算法通过预处理构建next数组（记录模式串各位置的最长公共前后缀长度），在匹配过程中利用该数组避免不必要的回溯，将时间复杂度从朴素算法的O(m×n)优化到O(m+n)。文章详细阐述了next数组的构建原理和匹配过程，并提供了C++实现代码，演示了如何处理输入输出。通过示例展示了算法的实际应用，说明了KMP算法相比朴素匹配的高效性，特别适合模式串重复出现的场景。]]></description><category></category></item></channel></rss>