蓝桥杯网络寻路:有向图路径计数与去重技巧
1. 从“网络寻路”这道题看竞赛图论的真实考法蓝桥杯历届试题里“网络寻路”是一道被很多人低估的图论题。它表面上是一道普通的路径计数问题但真正上手写代码之后才会发现它考察的其实是对有向图路径结构的理解深度以及对计数去重的处理能力。我第一次做这道题的时候第一反应是直接上DFS暴力搜结果数据规模一上来直接超时后来重新读题才发现题目里藏着非常关键的约束条件正是这个条件把一道看似复杂的搜索题变成了一道可以推导公式的计数题。这道题适合已经掌握基本图论存储方式邻接表、邻接矩阵、了解DFS和BFS基本框架的读者。如果你正在准备蓝桥杯或者其他算法竞赛这道题非常值得反复琢磨因为它代表了一类典型的“看起来像搜索实际上是数学计数”的题型。很多选手在赛场上遇到这类题第一反应就是暴力结果要么超时要么爆栈根本原因是没有先把题目的结构特征分析清楚。我下面会从题目本质、存储选型、核心推导、代码实现、易错点排查几个维度把这道题彻底拆开讲一遍。每一部分都会解释“为什么这样做”而不是只给一个结论。代码部分我会给出完整的C实现并且标注每一行的意图方便你直接拿去调试和验证。2. 题目到底在问什么把“网络寻路”翻译成人话2.1 题意拆解与关键约束题目的大致描述是给定一个有向图包含N个节点和M条边要求统计满足特定条件的路径数量。具体条件通常涉及路径长度和节点访问规则。在“网络寻路”这道题中核心约束是路径上经过的节点不能重复且路径长度固定为3条边即经过4个节点。这个约束非常关键。如果路径长度不固定那就变成了一个NP难的问题不可能在竞赛时限内求出精确解。但正因为长度固定为3我们就可以把问题转化为枚举中间的那条边然后计算两端各有多少种选择。我用一个具体的例子来说明。假设有一条边从u指向v我们想统计所有经过这条边的长度为3的路径。那么路径的形式必然是a - u - v - b其中a是u的某个入邻居b是v的某个出邻居。只要a、u、v、b四个节点互不相同这条路径就是合法的。这样一来问题就从“搜索所有路径”变成了“枚举每条边然后计算两端可选节点数”。时间复杂度从指数级直接降到了O(M)级别这就是分析题目结构带来的威力。2.2 为什么不能直接DFS暴力搜很多人看到“路径”两个字就条件反射地写DFS。我一开始也是这么干的。DFS的思路是从每个节点出发往下搜三层每层判断节点是否访问过如果走满三层就计数加一。这个思路本身没有错但问题在于时间复杂度。假设图中有N个节点每个节点的平均出度为d那么DFS的时间复杂度大约是O(N * d^3)。当N和d都比较大的时候这个数字会非常恐怖。比如N10000d100那计算量就是10^12级别完全不可能在1秒内跑完。更重要的是DFS还会带来额外的开销递归调用栈、visited数组的维护和回溯、大量的重复计算。这些开销在数据规模小的时候不明显但一旦规模上去就会成为压垮程序的最后一根稻草。所以正确的做法是先分析路径的结构特征找到可以批量计算的规律再用循环枚举代替递归搜索。这也是竞赛中处理路径计数问题的通用思路。2.3 路径长度为3的特殊结构长度为3的路径有一个非常好的性质它只有四个节点、三条边结构非常固定。我们可以把它写成a - b - c - d的形式其中b和c是中间节点a是起点d是终点。对于每一条边b - c我们只需要知道有多少个节点指向b即b的入度但要排除c有多少个节点从c指出即c的出度但要排除b然后还要排除a和d相同的情况以及a或d与b、c重合的情况。这些排除逻辑就是这道题最容易出错的地方。我个人的经验是先把所有情况都算出来然后再减去不合法的部分。这种“先加后减”的思路比“一开始就精确筛选”要清晰得多也更不容易漏掉边界情况。3. 存储结构选型邻接表还是邻接矩阵3.1 两种存储方式的本质区别邻接矩阵用一个二维数组g[i][j]表示从i到j是否有边优点是查询速度快O(1)就能判断两点之间是否有边缺点是空间复杂度是O(N^2)当N达到10000甚至更大的时候内存直接爆炸。邻接表用vectorint g[N]或者链式前向星来存储每个节点的出边空间复杂度是O(NM)非常适合稀疏图。缺点是查询两点之间是否有边需要遍历不能O(1)判断。对于“网络寻路”这道题我们需要频繁查询的是某个节点的出度是多少、某个节点的入度是多少、某条边的两个端点分别是谁。这些操作在邻接表下都可以高效完成。3.2 本题为什么必须用邻接表假设题目中N最大可以到10000那么邻接矩阵需要10000 * 10000 10^8个int大约400MB内存远超一般竞赛题的内存限制通常是128MB或256MB。而邻接表只需要存储M条边每条边两个int总共2M个int即使M100000也只需要不到1MB。更重要的是这道题的核心操作是枚举每条边然后查询两端节点的入度和出度。用邻接表存储时我们可以同时维护两个数组outDeg[i]表示i的出度inDeg[i]表示i的入度。这两个数组在读入边的时候就可以顺便统计出来后续计算直接O(1)查询非常方便。我个人的习惯是对于图论题只要N超过1000就优先考虑邻接表。除非题目明确需要O(1)判断两点之间是否有边否则邻接矩阵几乎没有优势。3.3 入度和出度的预处理技巧在读入每条边u - v的时候我们可以同时做三件事把v加入u的邻接表用于后续可能的遍历outDeg[u]inDeg[v]这样一遍读入之后所有节点的入度和出度就都统计好了。后续枚举边的时候对于边u - v以u为中间起点的可选前驱数量就是inDeg[u] - 1减去v本身因为路径不能走回头路以v为中间终点的可选后继数量就是outDeg[v] - 1减去u本身。这个预处理看起来很简单但它是整个算法能够O(M)运行的基础。如果没有提前统计好入度和出度每次枚举边的时候都要重新遍历邻接表去数时间复杂度就会退化。4. 核心推导从枚举边到计数公式4.1 基本计数模型对于每一条边u - v我们考虑所有经过这条边的长度为3的路径。路径形式是a - u - v - b其中a是u的入邻居即存在边a - ub是v的出邻居即存在边v - ba、u、v、b四个节点互不相同如果不考虑节点重复的限制那么对于边u - v可选的a有inDeg[u]个可选的b有outDeg[v]个总共贡献inDeg[u] * outDeg[v]条路径。但实际情况中a可能等于vb可能等于ua可能等于b这些情况都需要排除。所以我们需要在基本公式的基础上做减法。4.2 排除a等于v的情况如果a等于v那么路径就变成了v - u - v - b这条路径中v出现了两次不合法。对于边u - va等于v的条件是存在边v - u。也就是说如果u和v之间有双向边那么a就有可能取到v。在这种情况下我们需要从inDeg[u]中减去1减去v这个不合法的选择。所以修正后的可选前驱数量是inDeg[u] - (1 if 存在边v-u else 0)。4.3 排除b等于u的情况同理如果b等于u路径变成a - u - v - uu出现了两次不合法。对于边u - vb等于u的条件是存在边v - u。同样是双向边的情况。所以修正后的可选后继数量是outDeg[v] - (1 if 存在边v-u else 0)。4.4 排除a等于b的情况如果a等于b路径变成x - u - v - xx出现了两次不合法。对于边u - va等于b意味着存在某个节点x同时满足x - u和v - x。也就是说x是u的入邻居同时也是v的出邻居。这种情况下我们需要减去同时满足这两个条件的节点数量。这个数量可以通过遍历u的入邻居然后判断每个入邻居是否是v的出邻居来计算。但这样做的复杂度可能会比较高。不过在实际题目中a等于b的情况通常可以通过更简单的方式处理。一种常见的做法是在计算完所有路径之后再统一减去不合法的部分。但这样容易出错因为不同边的重复情况可能不一样。我个人的建议是对于每一道具体的题目先看清楚数据范围和约束条件再决定用哪种排除策略。如果数据范围允许最稳妥的方式是枚举所有可能的a和b然后逐一判断合法性。但如果数据范围很大就必须找到更高效的排除方法。4.5 完整公式与复杂度分析综合以上分析对于边u - v合法的路径数量可以近似表示为count (inDeg[u] - 1) * (outDeg[v] - 1) - overlap其中overlap是需要排除的a等于b的情况数量。这个公式的精确形式取决于题目的具体约束。有些版本的“网络寻路”题目中路径长度是2而不是3或者节点重复的限制不同公式会有变化。但核心思路是一样的先计算所有可能的情况再减去不合法的部分。时间复杂度方面枚举所有边是O(M)对于每条边计算基本计数是O(1)排除a等于b的情况可能需要O(d)的时间d是节点的平均度。总体复杂度大约是O(M * d)在大多数情况下都可以接受。5. 完整C实现与逐行注释5.1 代码框架与变量定义#include bits/stdc.h using namespace std; const int MAXN 10005; const int MAXM 200005; int n, m; vectorint outEdges[MAXN]; // 出边邻接表 vectorint inEdges[MAXN]; // 入边邻接表 int outDeg[MAXN]; // 出度 int inDeg[MAXN]; // 入度 bool hasEdge[MAXN][MAXN]; // 仅当N较小时使用用于快速判断双向边这里我用了两个邻接表outEdges存储出边inEdges存储入边。为什么要两个都存因为在排除a等于b的情况时我们需要同时访问u的入邻居和v的出邻居如果只有一个方向的邻接表就需要额外的转换操作不够直观。hasEdge二维数组只在N比较小的时候使用比如N1000用于O(1)判断两点之间是否有边。如果N很大这个数组会爆内存需要改用其他方式判断。5.2 读入与预处理int main() { cin n m; for (int i 0; i m; i) { int u, v; cin u v; outEdges[u].push_back(v); inEdges[v].push_back(u); outDeg[u]; inDeg[v]; if (n 1000) { hasEdge[u][v] true; } } // ... 后续计算 }读入部分很直接每读一条边就更新出边邻接表、入边邻接表、出度、入度。如果N比较小顺便更新hasEdge数组。这里有一个细节节点编号是从1开始的还是从0开始的蓝桥杯的题目通常从1开始编号但有些题目从0开始。我建议在读入之前先确认一下如果是0开始就把数组大小和循环范围相应调整。5.3 核心计数逻辑long long ans 0; for (int u 1; u n; u) { for (int v : outEdges[u]) { // 基本计数a有inDeg[u]种选择b有outDeg[v]种选择 long long cnt (long long)inDeg[u] * outDeg[v]; // 排除a等于v的情况 if (n 1000 hasEdge[v][u]) { cnt - outDeg[v]; // a取v时b仍有outDeg[v]种选择 } // 排除b等于u的情况 if (n 1000 hasEdge[v][u]) { cnt - inDeg[u]; // b取u时a仍有inDeg[u]种选择 } // 排除a等于b的情况 // 遍历u的入邻居判断是否也是v的出邻居 for (int a : inEdges[u]) { if (a v) continue; // 已经在前面排除了 if (n 1000 hasEdge[v][a]) { cnt--; // a同时是u的入邻居和v的出邻居不合法 } } ans cnt; } } cout ans endl;这段代码是整道题的核心。我逐段解释一下第一层循环枚举所有节点u第二层循环枚举u的所有出边u - v。对于每条边先计算基本计数inDeg[u] * outDeg[v]。然后排除a等于v的情况。如果存在边v - u即u和v之间有双向边那么a可以取v这种情况下b仍然有outDeg[v]种选择所以减去outDeg[v]。接着排除b等于u的情况。同样如果存在边v - ub可以取u这种情况下a仍然有inDeg[u]种选择所以减去inDeg[u]。最后排除a等于b的情况。遍历u的所有入邻居a如果a同时是v的出邻居即存在边v - a那么这条路径中a出现了两次不合法减去1。注意这里有一个容易忽略的细节——当a等于v时我们在前面已经排除了所以在遍历入邻居的时候要跳过a等于v的情况否则会重复减。5.4 大数据量下的优化思路上面的代码在N1000的时候可以正常工作但如果N很大比如N10000hasEdge数组就无法使用了。这时候需要换一种方式判断两点之间是否有边。一种可行的方案是把每个节点的出边集合用哈希表存储查询的时候O(1)判断。C中可以用unordered_setint来存储每个节点的出边。unordered_setint outSet[MAXN]; // 读入时 outSet[u].insert(v); // 查询时 if (outSet[v].count(u)) { ... }这样就把空间复杂度从O(N^2)降到了O(M)同时保持了接近O(1)的查询速度。不过unordered_set的常数比较大在数据量特别大的时候可能还是不够快。另一种方案是把所有边排序然后用二分查找判断复杂度是O(log M)也可以接受。我个人的经验是如果题目没有明确给出N的范围就先按小数据量写一版然后根据实际运行情况决定是否优化。不要一上来就追求最优解先把正确性保证了再说。6. 那些年我在这道题上踩过的坑6.1 重复计数同一条路径被算了多次这是我第一次做这道题时犯的最大的错误。我当时枚举的是路径的起点a然后DFS往下搜三层每搜到一条合法路径就ans。结果发现答案比预期大很多。后来我才意识到同一条路径a - u - v - b如果我从a开始搜会算一次从u开始搜如果也能走满三层又会算一次。但实际上这条路径只应该被计算一次。正确的做法是固定路径的枚举基准。比如固定枚举中间的那条边u - v这样每条路径只会被计算一次因为每条长度为3的路径有且只有一条中间边。这个教训让我明白了一个道理在计数问题中选择一个好的枚举基准比优化搜索效率更重要。枚举基准选得好计数自然就不重不漏。6.2 边界情况自环和重边的处理题目中可能存在自环u - u或者重边多条u - v的边。这两种情况都会影响计数结果。对于自环如果存在u - u那么当枚举到这条边时a和b的选择都会受到影响。我个人的建议是在读入的时候就把自环过滤掉因为自环在大多数路径计数问题中都是不合法的。对于重边如果题目没有明确说明“每条边最多出现一次”那么重边是可能存在的。重边会导致outDeg和inDeg的统计偏大从而影响计数结果。处理方式取决于题目的具体定义如果重边被视为不同的边那么计数时应该分别计算如果重边被视为同一条边那么读入时就需要去重。我在实际做题时通常会先假设没有重边和自环写完代码之后再用特殊数据测试一下看看是否需要额外处理。6.3 数据类型int溢出问题这个问题看起来很小但实际比赛中经常有人在这里翻车。当N和M都比较大的时候路径总数可能会超过int的范围2^31-1约21亿。比如N10000每个节点的平均出度是100那么总的路径数量大约是10000 * 100 * 100 * 100 10^10远超int的范围。这时候必须用long long来存储答案。我在代码中把ans声明为long long并且在计算cnt的时候也用了(long long)强制转换就是为了避免中间结果溢出。这个细节看起来不起眼但在比赛中可能就是AC和WA的区别。6.4 时间复杂度的隐形杀手即使算法的时间复杂度是O(M * d)如果d很大比如图是一个稠密图实际运行时间仍然可能超限。这时候需要考虑进一步优化。一种优化思路是对于a等于b的情况不要每次都遍历u的入邻居而是提前预处理一些信息。比如可以预处理每个节点的入邻居集合和出邻居集合的交集大小但这样做的空间复杂度可能会比较高。另一种思路是换一个枚举基准。比如枚举中间的两个节点u和v然后直接计算两端的选择数。但这样做的复杂度是O(N^2)在N很大的时候反而更慢。我个人的经验是对于蓝桥杯这个级别的比赛O(M * d)的算法通常已经足够了。如果还是超时那说明题目的数据规模可能比预想的要大需要重新审视题目约束看看是否有更简单的计数公式。7. 从这道题延伸出的通用解题套路7.1 路径计数问题的通用分析框架“网络寻路”这类题目其实有一个通用的分析框架我把它总结为三步第一步确定路径的长度和结构。长度为3的路径和长度为2的路径结构完全不同计数方式也不同。第二步选择合适的枚举基准。枚举基准的选择原则是每条合法路径有且只有一个对应的枚举对象。对于长度为3的路径中间边是一个很好的枚举基准。第三步计算每个枚举对象对应的合法路径数量然后累加。计算时要注意排除不合法的组合排除的方法通常是“先加后减”。这个框架不仅适用于“网络寻路”也适用于大多数路径计数问题。我在后来的比赛中遇到类似的题目都是按照这个框架来分析的效果很好。7.2 图论题中“看起来像搜索”的陷阱很多图论题表面上看起来需要搜索但实际上可以通过数学推导直接计算。这类题目的共同特征是路径长度固定且节点重复的限制比较严格。当你看到“路径长度为k”且k是一个比较小的常数时就应该警惕了这很可能是一道计数题而不是搜索题。搜索的时间复杂度通常是指数级的而计数的时间复杂度通常是多项式级的。我在训练的时候会刻意练习这种“识别题型”的能力。拿到一道题先花30秒判断它属于哪一类然后再决定用什么方法。这个习惯让我在比赛中节省了很多时间。7.3 如何训练这种“先分析后编码”的习惯我个人的训练方法是每拿到一道题先在纸上画出路径的结构图然后手动模拟几个小例子看看能不能找到规律。如果能在5分钟内找到规律就直接写代码如果找不到再考虑搜索或其他方法。这个习惯看起来会多花几分钟但实际上它节省的是调试和改代码的时间。很多选手一拿到题就开始写写到一半发现思路不对又推倒重来反而更浪费时间。另外我建议大家在平时训练的时候多做一些“一题多解”的练习。同一道题尝试用搜索写一遍再用计数写一遍对比两种方法的优缺点。这样不仅能加深对题目的理解还能积累更多的解题模板。8. 调试与验证怎么确认你的代码是对的8.1 构造小数据手动验证写完代码之后不要急着提交先自己构造几组小数据手动验证。比如N4M4边是1-2, 2-3, 3-4, 4-1这是一个四节点的环。手动数一下长度为3的路径有多少条然后和代码输出对比。如果结果一致再构造一组有双向边的数据比如1-2, 2-1, 2-3, 3-2看看代码是否能正确处理a等于v和b等于u的情况。手动验证的好处是你能清楚地知道每一组数据的预期答案是多少如果代码输出不对就能快速定位问题。8.2 对拍用暴力程序验证高效程序如果手动验证通过但你还是不放心可以写一个暴力搜索的程序然后用随机数据对拍。暴力程序的思路很简单枚举所有可能的起点DFS搜三层把所有合法路径存到一个set里去重最后输出set的大小。对拍的流程是随机生成一组数据分别用暴力程序和高效程序跑一遍如果结果不一致就说明高效程序有问题。然后把这组数据保存下来手动分析问题出在哪里。这个方法虽然有点麻烦但它是验证代码正确性最可靠的方式。我在准备比赛的时候几乎每道计数题都会对拍一遍确保万无一失。8.3 常见WA原因速查表错误类型典型表现排查方法重复计数答案偏大检查枚举基准是否唯一漏算情况答案偏小检查是否漏掉了某些合法路径边界未处理特定数据WA检查自环、重边、双向边数据类型溢出大数据WA检查是否用了long long数组越界运行时错误检查数组大小是否足够初始化遗漏多组数据WA检查全局变量是否重置这张表是我自己总结的每次WA的时候都会对照着排查一遍基本上能覆盖90%以上的错误情况。9. 写在最后一点个人体会这道“网络寻路”我前前后后做了三遍。第一遍用DFS暴力搜超时第二遍用枚举边加简单计数WA第三遍才把所有的边界情况都考虑清楚最终AC。这个过程让我深刻体会到图论计数题的核心不在于代码写得多快而在于分析得多透。很多人觉得蓝桥杯的题目偏简单不需要太深入的分析。但我的经验是越是看起来简单的题目越容易在细节上翻车。像“网络寻路”这种题思路其实不难难的是把所有不合法的组合都排除干净。这需要耐心也需要对路径结构有清晰的认识。如果你正在准备蓝桥杯我建议你把这道题当作一个练习“先分析后编码”习惯的好机会。不要急着写代码先在纸上把路径的结构画出来把所有的边界情况列出来然后再动手。这个习惯一旦养成你在比赛中的失误率会大幅下降。最后分享一个小技巧在写计数类题目的时候我习惯把所有的“加”和“减”都写成注释标注清楚每一步在排除什么情况。这样即使代码出了bug也能快速定位到是哪一步的排除逻辑出了问题。这个习惯看起来有点笨但在关键时刻能救命。

相关新闻

生产故障自愈的白盒可解释性:基于决策树与图推理的 Agent 根因路径可视化输出

生产故障自愈的白盒可解释性:基于决策树与图推理的 Agent 根因路径可视化输出

在人工智能与大语言模型全面渗透运维(AIOps)的今天,“故障自愈 Agent”正在从前沿概念走向生产落地。许多团队通过给 LLM 绑定各类排障工具与止血脚本,构建出了能够自动执行“重启 Pod”、“切流降级”和“配置回滚”的自动化代理…

2026/10/14 2:04:18 阅读更多 →
MPEG PS(Program Stream)介绍

MPEG PS(Program Stream)介绍

MPEG PS(Program Stream)是MPEG-2标准(ISO/IEC 13818-1)中定义的一种容器格式,主要用于将音视频等基本流复用为一个单一数据流,以便于存储或传输。 🧱 封装基本单元与流程 MPEG PS封装的核心思想…

2026/10/14 2:04:18 阅读更多 →
虚拟存储与页面置换算法:缺页中断、地址变换及EAT计算全解析

虚拟存储与页面置换算法:缺页中断、地址变换及EAT计算全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:03:18 阅读更多 →

最新新闻

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

单片机毕设选题推荐:基于STM32的婴儿摇篮哭泣尿床监测与环境联动控制系统设计 基于物联网的婴儿床温湿度自动调节与哄睡装置设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →
Lua数值类型全解析:整数浮点与整除取余避坑指南

Lua数值类型全解析:整数浮点与整除取余避坑指南

很多朋友第一次接触 Lua程序设计,是在某个配置文件或者游戏模组里。打开一个脚本,想改个数值看看效果,结果被注释符号、表达式、类型转换这些基础概念卡住了。我最初接触Lua也是因为类似场景——某项目的规则引擎用Lua做嵌入式脚本&#xff0…

2026/10/14 2:44:28 阅读更多 →
Workerman 5.x 完整实战指南:基于事件驱动的 PHP 异步网络框架

Workerman 5.x 完整实战指南:基于事件驱动的 PHP 异步网络框架

后端 【免费下载链接】workerman An asynchronous event driven PHP socket framework. Supports HTTP, Websocket, SSL and other custom protocols. 项目地址: https://gitcode.com/gh_mirrors/wo/workerman 点击查看 免费下载 Workerman 是一个使用纯 PHP 编写…

2026/10/14 2:44:28 阅读更多 →
uniPush离线推送实战:厂商通道配置与到达率优化指南

uniPush离线推送实战:厂商通道配置与到达率优化指南

1. 离线推送到底在解决什么问题做移动端应用的人迟早会撞上这个需求:用户把App划掉了、手机锁屏了、后台进程被系统回收了,这时候业务侧发出一条通知,用户还能不能在通知栏看到?答案就是离线推送要解决的核心命题。uniPush这套方案…

2026/10/14 2:44:28 阅读更多 →
单片机计算机毕设之基于物联网的婴儿床环境自动调节与哄睡联动装置设计 基于单片机的智能婴儿摇篮温湿度调节与远程监控系统设计(032707)

单片机计算机毕设之基于物联网的婴儿床环境自动调节与哄睡联动装置设计 基于单片机的智能婴儿摇篮温湿度调节与远程监控系统设计(032707)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/10/14 2:44:28 阅读更多 →
Java异步编程进阶:CompletableFuture任务编排与线程池实战

Java异步编程进阶:CompletableFuture任务编排与线程池实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 2:43:28 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →