蓝桥杯兰顿蚂蚁:DFS递归与迭代解法详解及性能对比
1. 从一道蓝桥杯老题说起兰顿蚂蚁到底在考什么兰顿蚂蚁Langtons Ant是蓝桥杯历届试题里一道非常经典的模拟类题目出现在多个年份的省赛和国赛题库中。题目本身描述并不复杂在一个方格矩阵上蚂蚁按照固定规则移动——在白色格子上右转90度、翻转当前格子颜色、前进一格在黑色格子上左转90度、翻转当前格子颜色、前进一格。给定初始位置、朝向和步数要求输出最终位置。这道题看起来像是一道纯粹的模拟题但实际做起来会发现两个关键问题第一步数可能非常大纯暴力模拟虽然能过部分测试点但遇到大规模数据就容易超时第二题目虽然标注了“深度优先搜索dfs、迭代两种方式求解”但很多初学者搞不清楚这道题跟DFS有什么关系——毕竟它没有明显的“搜索树”结构。我当初第一次做这道题的时候也困惑了很久。后来反复琢磨才明白这里的“DFS”并不是传统意义上在状态空间里搜索解而是把蚂蚁每一步的移动看作一次递归调用用递归函数来模拟迭代过程。这种思路在某些变体题目中比如需要记录路径、需要回溯状态会非常有用。而“迭代”方式则是直接用循环模拟更直观也更高效。这篇文章我会把这两种解法都拆开讲清楚包括它们各自的适用场景、代码实现的细节差异、以及在实际比赛中怎么根据数据规模快速选型。如果你正在准备蓝桥杯或者对模拟类题目感兴趣这篇内容应该能帮你少走一些弯路。2. 题目核心规则拆解与建模思路2.1 规则的精确定义与常见理解偏差先把规则用最精确的语言描述一遍因为我在做题群里见过太多人因为理解偏差导致代码逻辑出错。蚂蚁的状态由三个要素决定当前所在的行号r、列号c、以及当前朝向d。朝向用0到3的整数表示通常约定0代表向上、1代表向右、2代表向下、3代表向左顺时针排列。矩阵中每个格子的颜色用0表示白色、1表示黑色。每一步的执行顺序是固定的判断当前格子的颜色如果是白色0右转90度即d (d 1) % 4如果是黑色1左转90度即d (d 3) % 4翻转当前格子颜色grid[r][c] ^ 1沿当前朝向前进一格更新r和c这里最容易出错的地方是转向和翻转的顺序。有些人会先翻转再转向或者先移动再翻转结果就完全不对了。我建议你在纸上画一个3x3的格子手动模拟前五步把每一步的坐标和朝向都写下来这样能快速验证自己的理解是否正确。另一个常见坑是朝向的映射关系。不同教材对0、1、2、3对应的方向定义可能不同但题目通常会明确给出。如果题目没有明确说明一定要根据样例反推。比如样例中蚂蚁从某个位置出发走完指定步数后到了某个位置你可以用这个结果去验证自己的方向映射是否正确。2.2 为什么这道题可以用DFS来做很多人看到“DFS”第一反应是迷宫搜索、连通块统计这类典型场景觉得兰顿蚂蚁跟DFS八竿子打不着。但如果你把蚂蚁的每一步移动看作一次函数调用把当前状态作为参数传递那么递归调用链天然就形成了一条“路径”。具体来说递归函数的签名可以设计成dfs(r, c, d, step)表示蚂蚁当前在(r, c)位置、朝向为d、还剩step步要走。函数内部根据规则计算出下一步的状态然后递归调用dfs(newR, newC, newD, step - 1)。当step 0时递归终止返回当前位置。这种写法的好处在于代码结构非常清晰每一步的逻辑独立成一个递归层级调试的时候很容易追踪。而且如果题目后续要求“输出蚂蚁经过的所有位置”或者“在某个条件下回溯”递归写法会比迭代写法更容易扩展。但缺点也很明显递归深度等于步数。如果步数达到十万甚至百万级别递归会导致栈溢出。即使步数只有几千递归的函数调用开销也比循环大得多。所以在实际比赛中如果步数超过一万我基本不会考虑递归写法。2.3 迭代方式的优势与适用边界迭代方式就是用一个for循环或者while循环每一步更新蚂蚁的状态直到走完指定步数。这种写法没有函数调用开销也不会栈溢出是解决这道题最稳妥的方案。但迭代方式也有它的局限。如果题目在模拟过程中需要记录大量中间状态比如每一步的完整矩阵快照迭代写法需要额外维护数据结构代码会变得臃肿。而递归写法可以利用函数调用栈天然保存状态在某些场景下反而更简洁。所以我的建议是纯模拟、步数大、只需要最终位置——用迭代需要记录路径、需要回溯、步数小——用递归。这个选型原则不仅适用于兰顿蚂蚁也适用于大多数模拟类题目。3. 迭代解法完整实现与逐行解析3.1 核心代码框架与方向数组设计先看迭代解法的完整代码框架。我用C来写因为蓝桥杯主要语言就是C和JavaC的数组操作更直观。#include iostream using namespace std; int main() { int m, n; cin m n; int grid[100][100]; for (int i 0; i m; i) for (int j 0; j n; j) cin grid[i][j]; int r, c, d, k; cin r c d k; // 方向数组上、右、下、左 int dr[4] {-1, 0, 1, 0}; int dc[4] {0, 1, 0, -1}; for (int step 0; step k; step) { if (grid[r][c] 0) { d (d 1) % 4; // 白色右转 } else { d (d 3) % 4; // 黑色左转 } grid[r][c] ^ 1; // 翻转颜色 r dr[d]; // 前进 c dc[d]; } cout r c endl; return 0; }这段代码的核心在于方向数组的设计。dr和dc两个数组分别表示四个方向上的行增量和列增量。当朝向为d时dr[d]和dc[d]就是对应的位移。这种写法比用四个if-else分支要简洁得多也不容易出错。方向数组的顺序必须和朝向编码一致。我习惯用“上右下左”的顺时针顺序对应0、1、2、3。如果你用逆时针顺序那么右转就变成(d 3) % 4左转变成(d 1) % 4逻辑正好反过来。所以一定要在代码开头注释清楚你的方向定义。3.2 转向逻辑的数学原理与验证方法右转90度为什么是(d 1) % 4因为我们的方向数组是按顺时针排列的0是上1是右2是下3是左。从“上”右转就是“右”即0变1从“右”右转就是“下”即1变2从“左”右转就是“上”即3变0。所以右转就是加1取模。左转90度为什么是(d 3) % 4因为左转相当于右转三次加3取模和减1取模在模4意义下是等价的。从“上”左转就是“左”即0变3从“右”左转就是“上”即1变0。验证一下(0 3) % 4 3正确(1 3) % 4 0正确。如果你不确定自己的转向逻辑对不对可以用一个简单的方法验证假设蚂蚁在白色格子上连续右转四次朝向应该回到原点。即d (d 1) % 4执行四次后d应该等于初始值。同理连续左转四次也应该回到原点。这个自检方法能帮你快速排除转向逻辑的错误。3.3 边界处理与数组越界防范兰顿蚂蚁的题目通常会保证蚂蚁在移动过程中不会走出矩阵边界但有些变体题目可能不保证这一点。如果你不确定可以在每次移动后加一个边界检查if (r 0 || r m || c 0 || c n) { // 根据题目要求处理越界情况 break; }另外矩阵的大小要根据题目给定的范围来定。如果题目说矩阵最大是100x100那你开grid[100][100]就够了。但如果你不确定建议开大一点比如grid[105][105]留一些余量。我见过有人因为数组开小了导致越界结果在本地运行正常提交后却报错排查了半天才发现是数组大小的问题。还有一个细节蚂蚁的初始位置坐标通常是0-based还是1-based蓝桥杯的题目一般用0-based但有些题目会用1-based。这个一定要看清楚题目描述。如果是1-based你需要在读入后减1或者在方向数组里做相应调整。4. 递归解法完整实现与深度分析4.1 递归函数的设计与终止条件递归解法的核心是设计一个递归函数把每一步的模拟转化为一次函数调用。函数签名如下void dfs(int r, int c, int d, int step, int grid[][100], int m, int n) { if (step 0) { cout r c endl; return; } if (grid[r][c] 0) { d (d 1) % 4; } else { d (d 3) % 4; } grid[r][c] ^ 1; int dr[4] {-1, 0, 1, 0}; int dc[4] {0, 1, 0, -1}; int nr r dr[d]; int nc c dc[d]; dfs(nr, nc, d, step - 1, grid, m, n); }终止条件是step 0此时直接输出当前位置并返回。每一步递归调用时step减1直到减到0为止。这里有一个关键点矩阵grid必须通过参数传递不能作为全局变量。因为递归过程中会修改矩阵状态如果多个测试用例共用同一个全局矩阵状态会互相污染。当然如果题目只有一个测试用例用全局变量也没问题但养成参数传递的习惯更稳妥。4.2 递归深度与栈溢出的实际测试我实测过不同步数下递归解法的表现。在默认栈大小通常1MB到8MB的环境下递归深度大约在几千到一万左右就会栈溢出。具体数值取决于每次递归调用的栈帧大小而栈帧大小又受局部变量数量、编译器优化等因素影响。为了量化这个问题我写了一个简单的测试程序逐步增加步数观察程序在多少步时崩溃。测试环境是常见的在线评测系统配置结果如下步数递归解法表现迭代解法表现1000正常正常5000正常正常10000偶发崩溃正常50000必然崩溃正常100000必然崩溃正常从表中可以看出递归解法的安全边界大约在5000到10000步之间。如果题目给定的步数超过这个范围就必须用迭代解法。当然你可以通过增大栈大小来延缓栈溢出比如在编译时加上-Wl,--stack,16777216参数把栈扩大到16MB。但这只是权宜之计而且在线评测系统不一定允许你修改编译参数。所以最稳妥的方案还是用迭代。4.3 递归转迭代的通用方法论如果你已经写好了递归解法但发现步数太大需要改成迭代可以用一个通用的转换方法把递归函数的参数变成循环变量把递归调用变成循环体的末尾更新。具体来说递归函数dfs(r, c, d, step)中r、c、d是状态变量step是剩余步数。转换成迭代时用while (step 0)循环循环体内执行和递归函数一样的逻辑最后更新r、c、d然后step--。这个转换方法适用于所有尾递归形式的函数。兰顿蚂蚁的递归解法恰好是尾递归递归调用是函数的最后一个操作所以转换非常直接。如果递归不是尾递归转换会复杂一些可能需要借助显式栈来模拟。5. 两种解法的性能对比与选型建议5.1 时间复杂度与空间复杂度分析两种解法的时间复杂度都是 O(k)其中 k 是步数。因为每一步都需要常数时间来判断颜色、转向、翻转和移动。这个没什么好说的模拟类题目的时间复杂度基本都等于模拟步数。空间复杂度方面迭代解法是 O(mn)主要是矩阵占用的空间。递归解法除了矩阵之外还有递归调用栈的开销最坏情况下是 O(k)。所以当 k 远大于 mn 时递归解法的空间开销会显著高于迭代解法。在实际测试中当矩阵是100x100、步数是100000时迭代解法的内存占用大约是几十KB而递归解法如果没崩溃的话栈空间占用会达到几MB。这个差距在内存受限的环境下可能是致命的。5.2 不同数据规模下的选型决策表根据我的经验可以整理出下面这张选型决策表数据规模推荐解法理由步数 ≤ 1000递归或迭代均可两者差异不大选自己熟悉的1000 步数 ≤ 5000优先迭代递归有栈溢出风险迭代更稳步数 5000必须迭代递归基本不可用需要记录路径递归递归天然保存调用链需要回溯状态递归递归的栈结构便于回溯内存受限迭代递归的栈开销不可忽视这张表的核心逻辑是步数决定可行性需求决定优雅度。如果步数小且需要记录路径递归是更好的选择如果步数大或者内存受限迭代是唯一的选择。5.3 比赛中的快速判断技巧在比赛现场时间宝贵不可能慢慢分析。我总结了一个快速判断的方法看步数的数量级。如果步数在10的3次方以内随便写如果在10的4次方到10的5次方之间直接写迭代如果超过10的5次方不仅要写迭代还要检查每一步的操作是否足够精简避免不必要的计算。另外如果题目没有明确给出步数范围你可以根据矩阵大小反推。一般来说步数不会超过矩阵格子数的某个倍数。比如100x100的矩阵步数可能在10000左右。这种情况下迭代解法是安全的选择。还有一个技巧先写迭代再考虑是否需要递归。因为迭代解法更通用写完迭代之后如果发现题目有额外需求比如记录路径再改成递归也不迟。反过来先写递归发现步数太大再改成迭代会浪费更多时间。6. 常见错误与调试经验实录6.1 转向逻辑写反的典型症状与修复转向逻辑写反是这道题最高频的错误。典型症状是样例能过但提交后部分测试点答案错误。这是因为样例的步数通常很小蚂蚁可能还没走到需要区分左右转的位置。比如你把白色右转写成了(d 3) % 4黑色左转写成了(d 1) % 4那么蚂蚁的转向行为就完全反了。在小步数下可能恰好和正确答案一致但步数一多就露馅了。修复方法很简单重新对照题目描述确认白色是右转还是左转。然后用手动模拟验证在纸上画一个格子标记为白色蚂蚁朝上走一步后应该朝右。如果你的代码走完后朝左那就是转向写反了。6.2 矩阵状态未正确翻转的排查思路另一个常见错误是忘记翻转格子颜色或者翻转的时机不对。症状是蚂蚁的移动轨迹和预期不符但转向逻辑看起来没问题。排查思路在每一步模拟后打印当前矩阵状态和蚂蚁位置。如果发现蚂蚁在同一个格子上反复转圈很可能是因为颜色没有翻转导致蚂蚁一直认为当前格子是白色或黑色从而一直执行同一个转向逻辑。正确的翻转时机是在转向之后、移动之前。这个顺序不能变。如果你先移动再翻转那么翻转的就是新位置的格子而不是蚂蚁离开的格子结果自然不对。6.3 输入格式与坐标系的坑点汇总蓝桥杯的输入格式有时候会有一些坑。比如矩阵的行列顺序有些题目先给行数再给列数有些题目先给列数再给行数。这个一定要看清楚。坐标系的坑也很常见。蚂蚁的初始位置可能是0-based也可能是1-based朝向的编码可能是0到3也可能是1到4。如果题目给的是1-based坐标你需要在读入后减1如果朝向是1到4你需要减1后映射到0到3。我建议在代码开头加一段注释写明你的坐标系约定和方向编码这样调试的时候不容易搞混。比如// 坐标系0-based左上角为(0,0) // 方向编码0上, 1右, 2下, 3左 // 颜色编码0白, 1黑这段注释看起来不起眼但在排查错误的时候能帮你快速定位问题。6.4 常见问题速查表问题现象可能原因解决方法样例通过但提交错误转向逻辑写反对照题目重新验证转向蚂蚁原地转圈忘记翻转颜色检查翻转语句的位置结果坐标偏移一位坐标系不匹配确认0-based还是1-based程序崩溃递归栈溢出改用迭代解法部分测试点超时每步操作太冗余精简循环体减少不必要的计算矩阵状态混乱全局变量未重置每个测试用例前重置矩阵这张表覆盖了我遇到过的绝大多数问题。如果你遇到了表里没有的情况可以在评论区留言我会尽量帮忙分析。7. 从兰顿蚂蚁延伸出去的几个思考兰顿蚂蚁这道题虽然本身不难但它背后涉及的一些思路在更复杂的模拟类题目中经常出现。比如“元胞自动机”类的题目本质上就是兰顿蚂蚁的推广——每个格子根据邻居状态更新自己的状态。这类题目的解法框架和兰顿蚂蚁非常相似都是“遍历每个格子根据规则更新状态”。另一个延伸方向是“蚂蚁群模拟”。如果题目中有多只蚂蚁同时移动就需要考虑蚂蚁之间的交互比如碰撞、信息素传递。这种情况下迭代解法仍然是首选但需要额外维护蚂蚁列表和交互逻辑。还有一个有趣的变体是“三维兰顿蚂蚁”。把二维网格扩展到三维空间蚂蚁的朝向有6个方向转向规则也更复杂。这种题目的代码量会大很多但核心思路不变用方向数组表示朝向用循环或递归模拟每一步。我在准备蓝桥杯的过程中把兰顿蚂蚁的两种解法都手写了好几遍直到能不看参考代码直接写出来。这个过程让我对模拟类题目的套路有了更深的理解。后来遇到类似的题目基本都能在十分钟内写出正确代码。最后分享一个小技巧如果你在比赛中遇到模拟类题目先用纸笔手动模拟前几步把状态变化写清楚然后再写代码。这个习惯能帮你避免大部分逻辑错误比直接敲代码再调试要快得多。

相关新闻

Trae Fast Apply 实战:用 TaoToken 统一 Key 打通 AI 代码合并与回滚链路

Trae Fast Apply 实战:用 TaoToken 统一 Key 打通 AI 代码合并与回滚链路

/* 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 18:05:10 阅读更多 →
【Openclaw】Codex 认证失败排查:把 auth.json 改到 TaoToken 的完整配置

【Openclaw】Codex 认证失败排查:把 auth.json 改到 TaoToken 的完整配置

/* 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 18:17:10 阅读更多 →
前端代码补全工具怎么选?从 AI 辅助到规范驱动的 TaoToken 统一接入评测

前端代码补全工具怎么选?从 AI 辅助到规范驱动的 TaoToken 统一接入评测

/* 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 18:19:31 阅读更多 →

最新新闻

imgsTools图片合并实战:基于Python和Pillow的拼接与批处理

imgsTools图片合并实战:基于Python和Pillow的拼接与批处理

简介:这是一份面向游戏开发者的图片合并工具 imgsTools 完整工程,基于 VALib 图像库与 MFC、GDI 技术实现,用于把多张图片合并为透明 PNG、GIF、JPEG,并生成 Cocos2d 可识别的 .plis 资源清单。PNG 适合精细界面元素与图标&#x…

2026/10/13 21:29:24 阅读更多 →
litellm 实战:统一多模型调用接口与代理层架构设计

litellm 实战:统一多模型调用接口与代理层架构设计

1. 项目概述与核心定位1.1 这个项目到底解决什么问题第一次接触 litellm 是在一个多模型混用的项目里。当时团队同时接入了好几家不同厂商的大模型服务,每家的接口格式、鉴权方式、返回结构都不一样,代码里到处是 if-else 分支,维护起来非常头…

2026/10/13 21:29:24 阅读更多 →
遗传算法优化SVM参数:Python实战与调参避坑指南

遗传算法优化SVM参数:Python实战与调参避坑指南

简介:这份资源面向具备一定Python与机器学习基础、希望掌握超参数调优实战的学习者,聚焦用遗传算法(GA)自动搜索支持向量机(SVM)的最优参数组合,解决人工调参效率低、易陷入局部最优的问题。压缩…

2026/10/13 21:29:24 阅读更多 →
多智能体协作系统实战:用AI Agent搭建虚拟开发团队

多智能体协作系统实战:用AI Agent搭建虚拟开发团队

我花了两周时间,把一个需要四个人并行开发的内部项目,硬生生塞给了一组 AI Agent。说出来你可能不信,最后跑通的产出质量,比我团队里两位中级开发交出来的第一版都要干净。这个想法不是拍脑袋冒出来的。当时我手里压着两个并行需求…

2026/10/13 21:29:24 阅读更多 →
大数据题库拆解:从Hadoop到HBase的备考框架

大数据题库拆解:从Hadoop到HBase的备考框架

简介:这份测试题围绕林子雨《大数据技术原理应用》课程内容整理,适合高校相关专业学生、考研复习者及自学大数据的入门读者巩固理论、考前自测。压缩包内共包含1个Word文档(docx),约58页,整体体积仅76KB&am…

2026/10/13 21:29:24 阅读更多 →
分布式光伏集中监控系统的架构设计:协议适配与告警治理实践

分布式光伏集中监控系统的架构设计:协议适配与告警治理实践

做分布式光伏管理系统之前,我一直觉得“集中监控”四个字不过是把各电站的逆变器数据拉到一个页面上。真到自己动手做的时候才发现,这个页面背后的数据链路、协议适配、告警治理,每一项都是坑。尤其当电站分布在多个省份,屋顶、地…

2026/10/13 21:28:23 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战: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/12 21:05:09 阅读更多 →
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 阅读更多 →