2.13


思路:从最小的数字 1 开始,不断尝试将其添加到当前的拆分序列中,然后递归地对剩余的数字进行拆分。在递归过程中,每次选择的数字不小于上一次选择的数字,这样可以保证生成的拆分序列是按字典序排列的。排除只包含 n 本身的拆分情况,因为题目要求拆分成若干个小于 n 的自然数之和。将满足条件的拆分序列按字典序输出。


思路:读取方阵大小和元素存到二维数组,创建队列用于 BFS。遍历方阵四条边界,把值为 0 的位置坐标放入队列,同时标记为 -1。只要队列不为空,取出队首位置,查看它上下左右四个相邻位置。若相邻位置在方阵内且值为 0,标记为 -1 并加入队列。遍历整个方阵,把值是 0 的位置换成 2,值是 -1 的恢复成 0。按格式输出处理好的方阵。

思路:读取 N 行,每行 M 个字符,将其存储在 screen 二维向量中。同时,若当前像素为白色(值为 1),将其距离初始化为 0 并加入队列 q。从队列中取出一个像素点 (x, y)。检查该像素点的四个相邻像素点 (newX, newY)。若相邻像素点在屏幕范围内且其距离大于当前像素点距离加 1,则更新其距离并将其加入队列。遍历 dist 二维向量,输出每个像素点到最近白色像素点的最短距离,元素间用空格分隔,每行末尾换行。


思路:读入维他命种类数 v 及牛对每种维他命的最低需求量,存于 required 数组;读入饲料种数 g 及每种饲料含有的维他命量,存于 feeds 二维数组。用二进制数表示饲料组合,从 0 到 2^g - 1 遍历,统计各组合中饲料种数并记录所选饲料编号。计算各组合提供的维他命总量,与 required 对比,判断是否满足需求。记录满足需求且饲料种数最少的组合,若有多种组合种数相同,选字典序小的。最后输出最少饲料种数和对应编号。


思路:queens 数组存每行棋子列号。col 数组标记列是否有棋子。diag1 和 diag2 数组分别标记主、副对角线有无棋子。solutions 记录解的总数。firstThreeSolutions 存前三个解。逐行放棋子,若放完 行,得到一个解,更新 solutions 和 firstThreeSolutions。对当前行,遍历每列,检查列和对角线是否能放,能放就更新状态,递归搜下一行。递归返回后,撤销当前行放置操作,试下一列。输出 firstThreeSolutions 里的前三个解,再输出 solutions 的值。


思路:读取地图大小和高度矩阵。创建 visited 数组和计数器。使用双重循环遍历每个单元格。对于每个未访问的单元格,使用 BFS 遍历所有相连的相同高度的单元格。在遍历过程中,检查边界单元格的高度,判断是否满足山脊或山谷的条件。根据判断结果增加山脊或山谷的计数。输出山脊和山谷的数量。
学习总结:
1.递归拆分问题
核心思路:从 1 开始,递归尝试添加数字到当前拆分序列,每次选择不小于上一次的数字保证字典序,排除仅含 n 本身的情况。
算法步骤:以 1 为起始数字,递归构建拆分序列。递归时保证数字递增,维护字典序。排除单元素 n 的拆分。输出满足条件的序列。
2.方阵填充问题
核心思路:用广度优先搜索(BFS)从方阵边界开始标记与边界相连的 0,剩余未标记的 0 即为闭合圈内的 0,将其替换为 2。
算法步骤:读取方阵,创建队列用于 BFS。遍历方阵边界,将 0 入队并标记为 -1。BFS 遍历队列,标记相连的 0。遍历方阵,将 0 换为 2,-1 恢复为 0。输出处理后的方阵。
3.像素距离问题
核心思路:将所有白色像素点加入队列,使用 BFS 从这些点开始更新相邻像素点的距离。
算法步骤:读取屏幕像素信息,白色像素距离设为 0 并加入队列。BFS 从队列取出像素点,更新相邻像素距离。输出每个像素到最近白色像素的最短距离。
4.饲料组合问题
核心思路:用位运算枚举所有饲料组合,计算各组合的维他命总量,与需求对比,找出最优解。
算法步骤:读取维他命需求和饲料信息。用二进制数枚举饲料组合。计算各组合的维他命总量并检查是否满足需求。记录满足需求且饲料种数最少的组合。输出最少饲料种数和对应编号。
5.n 皇后问题变
核心思路:使用回溯算法逐行尝试放置棋子,检查列和对角线约束,不满足则回溯。
算法步骤:用数组记录棋子位置和约束状态。逐行放置棋子,检查合法性。回溯撤销当前行放置,尝试下一列。输出前三个解和总数。
6.地势图山峰山谷问题
核心思路:对未访问区域进行 BFS,判断其是否为山峰或山谷。
算法步骤:读取地图大小和高度信息。创建访问标记数组和计数器。遍历未访问单元格,BFS 遍历相连相同高度单元格。检查边界单元格高度,判断是否为山峰或山谷。输出山峰和山谷数量。

posted @ 2025-02-13 22:41  1inkin_sub  阅读(20)  评论(0)    收藏  举报