从洪水填充算法到反向包围思想:填涂颜色问题的深度解析与实现
1. 项目概述从“填涂颜色”到算法思维的启蒙看到“填涂颜色”这个标题很多人的第一反应可能是儿童涂色游戏或者简单的图形处理。但在算法竞赛和编程学习的语境下这通常指向一类经典的搜索问题特别是“洪水填充”算法及其变种的应用。这类问题不仅是信息学奥赛如NOIP/CSP中的常客更是理解图论、搜索算法和问题建模的绝佳入门案例。它考察的远不止是代码实现更是将实际问题抽象为计算机可解模型的能力。简单来说这类问题的核心场景是给定一个由网格例如0和1构成的二维平面其中1通常代表边界或障碍物0代表待处理的区域。题目要求我们识别出被边界完全包围的“内部”0区域并将其标记或“填涂”为另一种状态比如2。这听起来简单但陷阱重重。比如如何区分“内部”和“外部”边界是否一定是闭合的网格边缘如何处理这些都是初学者最容易栽跟头的地方。我接触过很多从这道题开始学习搜索算法的朋友包括我自己早年也在这里卡过很久。它就像一道分水岭能清晰地检验你是否真正理解了深度优先搜索或广度优先搜索的遍历逻辑以及如何利用它们来解决一个具象的空间填充问题。接下来我将彻底拆解这个问题从思路分析、算法选型、代码实现到避坑指南提供一个完整的、可复现的解决方案。2. 核心思路与算法选型为什么是“反向包围”面对一个被1包围的0区域最直接的思路可能是先找到内部的一个0点然后从这个点出发用搜索算法把所有连通的0都标记为2。这个思路对吗对但前提是你得确定你找到的那个0点确实在内部。如果这个0点本身就在边界连通的外部区域那你就会错误地把外部区域也涂色了。所以问题的关键和第一个难点就在于如何可靠地定位一个绝对在“内部”的起点在复杂的、不规则的图形中这并非易事。一个更稳健、更通用的策略是采用“反向包围”或“挖洞”思想。2.1 “挖洞”思想的精妙之处我们不直接寻找内部的点而是反过来处理。我们假想在整个网格的外围增加一圈“保护层”这一圈都是0。然后从这个外圈的任意一个点出发执行一次搜索DFS或BFS把所有与外界连通的0区域都标记为一个特殊状态例如3。这一步完成后剩下的、未被标记的0点就一定是被1完全包围的内部点了因为所有能与外界“通气”的0都已经被我们提前标记并排除了。这个方法的优势非常明显绝对可靠只要外围加了一圈我们用来启动搜索的起点就一定在外部从而保证标记的都是外部区域。逻辑清晰将复杂的“找内部”问题转化为简单的“标记外部”问题。易于实现只需要一次从外到内的搜索即可。2.2 算法选择DFS与BFS的权衡无论是标记外部区域还是最终填充内部区域我们都需要一种遍历算法。这里有两个主流选择深度优先搜索和广度优先搜索。深度优先搜索实现简单代码简洁使用递归或栈即可。对于网格不大的情况非常高效。但需要注意递归深度如果网格非常大比如1000x1000递归DFS可能导致栈溢出。广度优先搜索使用队列实现能保证按“层”或“距离”遍历。它没有栈溢出的风险更适合大规模网格。代码稍比DFS复杂一点。对于“填涂颜色”这类问题网格尺寸通常在几十到几百的量级DFS递归完全够用且代码更易读。因此下面的讲解和示例代码将主要基于DFS递归实现。但我会在注意事项里详细说明如何改为BFS以及各自的适用场景。注意在正式竞赛中务必先看清数据范围。如果n, m 500稳妥起见建议使用BFS或非递归的DFS手动栈。2.3 方向数组优雅地处理四邻域遍历在网格中遍历我们通常检查当前点的上、下、左、右四个方向四连通。为了代码的整洁和避免重复我们会定义一个方向数组。// C 示例方向数组分别对应上、下、左、右的坐标变化 int dir[4][2] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};这样在搜索函数中我们只需要一个循环就能处理所有方向for (int i 0; i 4; i) { int nx x dir[i][0]; int ny y dir[i][1]; // 检查(nx, ny)是否合法且满足条件例如是0 // ... }3. 完整实现步骤与代码精讲我们假设题目输入是一个 n x m 的网格用二维数组a存储初始值只有0和1。我们的目标是输出将内部0变为2后的网格。3.1 步骤一数据读取与网格扩容首先读取网格数据。为了实施“反向包围”策略我们需要将原始网格扩大一圈。即创建一个大小为(n2) x (m2)的新数组g。将原始数据读入g[1..n][1..m]而第0行、第n1行、第0列、第m1列全部初始化为0。这额外的一圈就是我们的“外部起点保护区”。#include iostream using namespace std; int n, m; int a[35][35]; // 假设最大为30x30多开一些空间 int g[37][37]; // 扩容后的网格大小是 (n2) x (m2) int main() { cin n m; for (int i 1; i n; i) { for (int j 1; j m; j) { cin a[i][j]; g[i][j] a[i][j]; // 复制到扩容网格的中心区域 } } // 此时g数组的边界第0行、第n1行、第0列、第m1列默认是0 // ... 后续处理 }3.2 步骤二从外部启动DFS标记所有外部0我们从g[0][0]左上角外扩点开始进行DFS将所有与外界连通的0标记为3或其他非0、1、2的值。// 方向数组 int dir[4][2] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; void dfs(int x, int y) { // 如果越界或者当前点不是0可能是1也可能是已标记的3则返回 if (x 0 || x n1 || y 0 || y m1 || g[x][y] ! 0) { return; } // 将当前外部0标记为3 g[x][y] 3; // 向四个方向递归搜索 for (int i 0; i 4; i) { int nx x dir[i][0]; int ny y dir[i][1]; dfs(nx, ny); } } // 在主函数中调用 dfs(0, 0); // 从扩容网格的左上角开始淹没外部区域3.3 步骤三区分并填涂内部区域DFS标记外部区域结束后g网格中剩下的未被访问的0点就是被1包围的内部点。我们遍历原始数据范围(1..n, 1..m)如果g[i][j] 0则说明它是内部点将其在结果数组a中标记为2。// 步骤二标记外部区域 dfs(0, 0); // 步骤三填涂内部区域 for (int i 1; i n; i) { for (int j 1; j m; j) { // 在扩容网格中仍是0的就是内部点 if (g[i][j] 0) { a[i][j] 2; // 填涂颜色 } } }3.4 步骤四输出结果最后输出处理后的a数组即可。// 输出结果 for (int i 1; i n; i) { for (int j 1; j m; j) { cout a[i][j]; if (j m) cout ; // 控制空格输出符合常见OJ格式 } cout endl; }3.5 完整代码整合将以上部分组合起来就得到了一个健壮的解决方案#include iostream using namespace std; int n, m; int a[35][35]; int g[37][37]; // 比a大两圈 int dir[4][2] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; void dfs(int x, int y) { if (x 0 || x n1 || y 0 || y m1 || g[x][y] ! 0) { return; } g[x][y] 3; // 标记外部区域 for (int i 0; i 4; i) { dfs(x dir[i][0], y dir[i][1]); } } int main() { cin n m; // 读入并初始化扩容网格 for (int i 1; i n; i) { for (int j 1; j m; j) { cin a[i][j]; g[i][j] a[i][j]; } } // 从外扩边界开始DFS淹没所有外部0 dfs(0, 0); // 遍历原始区域填充内部0为2 for (int i 1; i n; i) { for (int j 1; j m; j) { if (g[i][j] 0) { a[i][j] 2; } } } // 输出 for (int i 1; i n; i) { for (int j 1; j m; j) { cout a[i][j]; if (j m) cout ; } cout endl; } return 0; }4. 关键细节、变种与深度解析4.1 为什么必须从(0,0)开始从(1,1)不行吗这是一个非常关键的细节。我们之所以选择g[0][0]作为起点是因为它绝对位于我们人工添加的外部保护圈上因此它代表的区域绝对属于“外部”。如果我们从g[1][1]开始而a[1][1]恰好是1边界那么DFS根本不会执行如果a[1][1]是0但这个0可能位于内部也可能位于外部我们无法保证。因此从(0,0)启动是算法正确性的基石。4.2 八连通与四连通的区别我们之前讨论的都是“四连通”即一个点只与上下左右四个邻居相连。但有些题目可能会定义“八连通”即还包括左上、右上、左下、右下四个对角线方向。四连通方向数组为{ {-1,0}, {1,0}, {0,-1}, {0,1} }。在这种情况下被包围的区域定义更严格只有上下左右都被1围住才算。八连通方向数组包含8个方向。此时即使对角线方向有路径通到外部该区域也不算被完全包围。使用“挖洞”法时搜索也需要按照八连通规则进行。如何判断题目是四连通还是八连通通常题目会明确说明。如果没说一般默认是四连通因为这是更常见、更严格的设定。在“填涂颜色”这类经典题中几乎都是四连通。4.3 如果网格边界本身就有0怎么办这正是“反向包围”法最巧妙的地方我们额外添加的一圈0确保了无论原始网格边缘有多少个0它们都会通过我们添加的这一圈连通起来从而被第一次DFS全部标记为“外部区域”。这样后续步骤中就不会错误地将边缘的0当作内部点来填充了。这个方法完美地统一处理了所有边界情况。4.4 性能分析与优化时间复杂度每个网格点最多被访问一次DFS标记外部 最终遍历填充因此时间复杂度是 O(n*m)对于 n, m 1000 的数据规模完全可行。空间复杂度主要是存储扩容网格 O(nm)以及DFS的递归栈深度 O(nm)最坏情况。对于大数据递归栈可能溢出。BFS实现优化将递归DFS改为队列实现的BFS可以彻底避免栈溢出风险且逻辑同样清晰。// BFS版本的核心代码片段 #include queue using namespace std; void bfs(int sx, int sy) { queuepairint, int q; q.push({sx, sy}); g[sx][sy] 3; // 入队即标记防止重复入队 while (!q.empty()) { auto [x, y] q.front(); q.pop(); for (int i 0; i 4; i) { int nx x dir[i][0]; int ny y dir[i][1]; if (nx 0 nx n1 ny 0 ny m1 g[nx][ny] 0) { g[nx][ny] 3; q.push({nx, ny}); } } } } // 在主函数中调用 bfs(0, 0);5. 常见错误与实战调试技巧即使理解了算法实现时也常常会掉进一些坑里。下面是我总结的几个高频错误点和调试方法。5.1 数组越界——最常见的运行时错误在DFS递归中对(nx, ny)进行递归调用前必须先判断其坐标是否在合法范围内[0, n1]和[0, m1]。如果忘记判断递归就会跑到g[-1][0]这样的非法内存地址导致程序崩溃段错误。上面的代码将越界判断放在dfs函数开头是一种安全的做法。5.2 死循环与重复访问如果没有对已访问的点进行标记DFS或BFS可能会在两个相邻的0点之间来回访问导致死循环递归栈溢出或无限循环。我们的解决方案是在进入某个点后立即将其状态从0改为3或其它值。这样下次再尝试访问这个点时g[x][y] ! 0的条件就会触发返回避免了重复访问。5.3 输出格式错误很多在线判题系统对输出格式要求严格。比如要求数字之间用空格隔开但行末不能有多余空格。上面代码中if (j m) cout ;就是为了精确控制空格输出。务必仔细阅读题目的输出说明。5.4 调试小技巧打印中间状态当程序结果不对时不要干瞪眼。在关键步骤后打印出中间网格状态是最高效的调试方法。// 在dfs调用后打印g网格看看外部区域标记对了没 cout After dfs, grid g: endl; for (int i 0; i n1; i) { for (int j 0; j m1; j) { cout g[i][j] ; } cout endl; } // 在填充内部区域后打印a网格看看结果 cout Result grid a: endl; // ... 打印a通过观察g网格你可以清晰地看到数字3是否正确地“淹没”了所有外部0是否还有0残留残留的0是否正好是你想填充的内部区域5.5 特殊测试用例自己构造一些极端或特殊的测试用例是检验程序鲁棒性的好方法全1网格输入全是1内部没有0。程序应该原样输出全1。全0网格输入全是0。此时整个区域都是“外部”我们的算法会将其全部标记为3因此内部0的个数为0输出应该还是全0因为不会执行a[i][j]2。环形边界网格中心有一个被1围住的0区域但网格边缘也有0。算法应能正确只填充中心区域。最小网格比如1x1的网格值为0。它算内部还是外部根据我们的算法外扩一圈后这个唯一的0会被从(0,0)开始的DFS标记为3所以它被认为是外部输出仍是0。这通常符合“未被包围”的直觉。6. 问题扩展与思维提升解决基础问题后我们可以思考一些变种和延伸这能极大提升算法思维。6.1 变种一统计封闭区域数量如果问题不是填充颜色而是统计有多少个被1完全包围的独立0区域即“洞”的数量。我们可以在标记完所有外部区域后遍历网格。每当遇到一个未被访问的0即g[i][j]0就从该点开始一次新的DFS或BFS将整个连通区域标记为已访问例如标记为4同时将计数器加一。这次搜索的范围仅限于原始网格内部且遇到1或边界就停止。这样计数器的值就是封闭区域的数量。6.2 变种二填充颜色不止一种假设题目要求被1包围的0区域可能不止一个并且要求给不同的封闭区域填充不同的颜色2, 3, 4...。这其实是变种一和基础版的结合。首先你需要找到所有封闭区域像变种一那样并为每个区域分配一个唯一的ID颜色值。然后在最终输出时将对应ID填入原始网格的相应位置。6.3 从二维到三维的思考这是一个很好的思维训练。如果问题变成一个三维的0-1矩阵要求填充被1面包围的0空间该怎么办核心算法“反向淹没”依然适用我们只需要将三维数组在六个面上各扩展一层0。从扩展边界上的一个点开始进行三维的DFS/BFS方向数组变成6个方向上下左右前后。标记所有与外界连通的空间。剩下的0就是内部空间进行填充。算法的时间复杂度变为 O(nmh)但思想一脉相承。6.4 不使用额外空间的“原地算法”挑战上面的标准解法使用了g这个扩容网格空间复杂度是 O(n*m)。能否只用原始的a网格完成这是一个很大的挑战。一种思路是先遍历网格边缘的0用DFS/BFS将它们标记掉例如改为3。然后遍历整个网格剩下的0就是内部0填充为2。最后再把边缘标记的3恢复为0。这个过程需要非常小心地处理标记值避免混淆并且可能需要两遍遍历。虽然节省了空间但逻辑复杂度增加容易出错。在竞赛或面试中除非有严格的空间限制否则优先使用清晰、正确的“扩容法”。7. 从“填涂颜色”到更广阔的算法世界“填涂颜色”虽然是一个具体的题目但它所蕴含的“洪水填充”和“反向思维”是算法中非常强大的工具。掌握它你就打开了好几扇门图像处理的基础Photoshop的“魔术棒”工具、画图软件的“油漆桶”工具其核心算法就是洪水填充。它用于选择颜色相似的连续区域。游戏开发在扫雷游戏中点击一个空白格子时周围一大片空白格子自动翻开用的就是BFS/DFS的填充思想。在一些迷宫生成或地图探索游戏里也广泛应用。连通区域分析在计算机视觉中识别一张二值化图片中有多少个独立的物体连通组件算法本质与此相同。解决更复杂的搜索问题许多复杂的迷宫问题、路径规划问题其预处理步骤常常包含“标记可达区域”或“排除无效区域”思路是相通的。回过头看解决这个问题的关键不在于写出DFS/BFS的代码模板而在于**“反向包围”这个建模思想**。它教会我们有时候直接求解问题很难不妨反过来思考解决其对立面或互补问题往往能柳暗花明。这种“正难则反”的思维在动态规划、图论等很多算法领域都有体现。最后关于代码实现我的个人习惯是在竞赛中对于这类明确规模的网格题我会直接开一个足够大的全局数组比如grid[105][105]应对100x100的数据避免动态内存分配的麻烦。在DFS函数中将边界判断写在最前面并采用引用传递网格数组以提高效率如果使用C。对于递归深度有潜在风险的题目我会不假思索地使用BFS队列版本毕竟稳定性压倒一切。记住清晰的逻辑和正确的输出永远比炫技的代码更重要。这道题吃透了再遇到“岛屿数量”、“被围绕的区域”这类LeetCode题目你会有一种降维打击的熟悉感。

相关新闻

分数规划算法优化与应用实践

分数规划算法优化与应用实践

1. 算法优化中的分数规划问题解析 分数规划(Fractional Programming)是数学优化领域中一类特殊问题,其目标函数为两个线性函数的比值。这类问题在资源分配、投资组合、机器学习等场景中广泛存在。16.01这个特定数值可能代表某种标准化评分系统…

2026/8/1 17:08:33 阅读更多 →
AI备注生成失效的3个隐性陷阱(92%团队踩过第2个,附诊断SOP表)

AI备注生成失效的3个隐性陷阱(92%团队踩过第2个,附诊断SOP表)

更多请点击: https://intelliparadigm.com 第一章:AI备注生成失效的3个隐性陷阱(92%团队踩过第2个,附诊断SOP表) AI备注生成看似开箱即用,实则极易在数据链路、上下文建模与权限策略三个隐性环节悄然失效。…

2026/8/1 17:08:33 阅读更多 →
计算机毕业设计之车辆挡泥板工厂管理系统

计算机毕业设计之车辆挡泥板工厂管理系统

随着新世纪无纸化办公方式的普及,自动化信息处理和基于网络的信息交互方式已被广泛应用。现在很多行业基本上都是交由计算机进行管理和测试,网络与计算机已成为整个线上管理体系中的重要组成部分。虽然信息技术广泛应用和数据存取更加方便,但…

2026/8/1 17:08:33 阅读更多 →

最新新闻

光学系统像差校正:从五大单色像差原理到实战设计优化

光学系统像差校正:从五大单色像差原理到实战设计优化

1. 项目概述:从“像差”这个磨人的小妖精说起如果你玩过摄影,或者用过显微镜、望远镜,肯定有过这样的体验:拍出来的照片边缘模糊、颜色发紫,或者看东西时总觉得视野边缘有点扭曲变形。这些让人头疼的问题,背…

2026/8/1 17:48:58 阅读更多 →
大学英语听力训练方法论:从辨音到应用的四层能力构建

大学英语听力训练方法论:从辨音到应用的四层能力构建

1. 项目概述:一份听力材料的深度价值挖掘看到“大学英语听说教程4听力原文及答案”这个标题,很多人的第一反应可能就是找一份现成的“标准答案”来应付作业或考试。但作为一个在英语教学和自主学习领域摸爬滚打了十多年的老手,我想告诉你&…

2026/8/1 17:48:58 阅读更多 →
解决Python连接网易邮箱Unsafe Login错误:客户端授权码使用指南

解决Python连接网易邮箱Unsafe Login错误:客户端授权码使用指南

1. 问题缘起:一封来自网易的“不安全”警告如果你最近在用 Python 的imaplib或者功能更强大的imapclient库,尝试连接你的网易邮箱(比如 163.com 或 126.com)来批量处理邮件,大概率会碰上一个让人头疼的提示&#xff1a…

2026/8/1 17:48:58 阅读更多 →
英雄联盟Akari助手:基于LCU API的完整游戏效率工具指南

英雄联盟Akari助手:基于LCU API的完整游戏效率工具指南

英雄联盟Akari助手:基于LCU API的完整游戏效率工具指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 英雄联盟Akari助手是一款基…

2026/8/1 17:48:58 阅读更多 →
告别网盘下载烦恼:9大平台直链解析助手全攻略

告别网盘下载烦恼:9大平台直链解析助手全攻略

告别网盘下载烦恼:9大平台直链解析助手全攻略 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅…

2026/8/1 17:48:58 阅读更多 →
骆驼三合一冲锋衣实测:防风防水透气性能全面评测

骆驼三合一冲锋衣实测:防风防水透气性能全面评测

这次我们来看一款户外运动装备——骆驼CAMEL AD12263514X三合一冲锋衣。这款产品主打防风、防水、透气三合一功能,号称能应对多种户外环境。对于经常登山、徒步或通勤需要应对多变天气的用户来说,这种多功能外套的实际表现值得重点关注。 本文将从实际使…

2026/8/1 17:47:57 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/8/1 13:02:46 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/8/1 10:33:33 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →