- 博客(10)
- 收藏
- 关注
原创 《算法集训》第15题--移动距离
题目要求计算在Z形排列的矩阵中两个楼号m和n之间的最短移动距离。矩阵按行排列,奇数行从左到右编号,偶数行从右到左。解题思路是分别找到m和n的坐标,然后计算曼哈顿距离(横纵坐标差的绝对值之和)。代码通过遍历楼号,记录n的坐标,并在到达m时终止循环。处理时需注意行尾和行首的边界条件,确保坐标正确。时间复杂度为O(m),适用于给定的约束条件。
2026-04-04 12:58:06
543
原创 《算法集训》第10题--所有可能的路径
题目要求在给定的有向无环图(DAG)中,找出从节点0到节点n-1的所有路径。使用深度优先搜索(DFS)算法,从起点0开始遍历相邻节点,当到达终点时记录路径。代码实现包括建立邻接表表示的图结构,通过DFS递归搜索所有可能路径,并利用回溯法撤销选择以探索其他路径。最终输出所有符合条件的路径集合。该算法能有效解决DAG中的路径查找问题。
2026-03-24 19:54:12
633
原创 《算法集训》第9题--图的遍历(简单版)
题目要求对于有向图中的每个点v,求出从v出发能到达的编号最大的点A(v)。使用邻接表存储图结构,对每个节点进行深度优先搜索(DFS)。搜索时维护访问标记数组,每次DFS后遍历所有节点,标记为已访问的即为可达节点。通过从小到大遍历节点,确保ans[i]存储的是可达最大编号节点。算法时间复杂度为O(N*(N+M)),适用于N,M≤10^3的数据规模。
2026-03-22 19:14:22
217
原创 《算法集训》第8题--全排列问题
本文介绍了如何用深度优先搜索(DFS)生成1到n的全排列。通过回溯算法,依次填充每个位置未被使用的数字,当所有位置填满时输出结果。时间复杂度为O(n!)。示例代码使用标记数组避免重复,并按字典序输出每个排列,数字保留5个场宽。适用于n≤9的情况,如输入3时输出6种排列组合。关键点在于正确实现DFS和回溯操作。
2026-03-22 09:51:12
211
原创 《算法集训》第6题--岛屿数量
该题目要求计算二维网格中岛屿的数量,其中'1'表示陆地,'0'表示水。岛屿由水平或垂直相邻的陆地组成。解决方案采用深度优先搜索(DFS)算法:遍历网格,遇到'1'时岛屿计数加1,并通过DFS将该岛屿所有相邻陆地标记为'0'以避免重复计数。算法时间复杂度为O(M×N),其中M和N分别为网格的行数和列数。关键技巧是在搜索过程中直接修改原数组代替标记数组,节省空间。
2026-03-21 17:51:30
229
原创 《算法集训》第7题--危险系数
题目要求计算两个站点间的危险系数DF(x,y),即破坏某个站点后使x和y不连通的关键点数量。解法:1) 先用DFS判断两点是否连通,否则输出-1;2) 枚举除x、y外的每个站点z,模拟破坏z后检查连通性,若x、y不连通则z是关键点;3) 统计关键点总数即为答案。使用邻接表存图,通过DFS实现连通性检查,时间复杂度主要取决于图的遍历次数。
2026-03-21 17:30:25
363
原创 《算法集训》第4题--螺旋矩阵II
因此可以设置四个变量t,b,l,r,分别控制上下左右四个边界,每一行或每一列填充好后,变量作对应的++或者--,使用一个大的while循环来控制这个过程,要填充的数num必须小于n * n,填充每一圈就是一次while循环,当num > n * n时循环结束。
2026-02-22 21:13:40
307
原创 《算法集训》第3题--十进制转十六进制
对于十进制来说,余数是几,对应位上的数就是几,十六进制同理,余数是0,数就是0;余数是1,数就是1;余数是10,数就是A;余数是14,数就是E;余数是15,数就是F。那么就可以定义一个字符串,将0~F这16个符号都存进去,再对要转换的数一直对16取余,得到余数后再去取对应下标的字符。当要转换的数小于16时,直接输出对应下标的字符即可,如输入9,输出9;输入12,输出C。
2025-01-21 22:06:35
783
原创 《算法集训》第2题--亲戚
每次递归调用后,我们将当前结点的父亲结点赋值为递归调用的结果,这样,递归结束后,要查找的结点和它到根结点这条路径上的所有祖先结点都成为了根结点的孩子(结点的高度都变为了1)。如果 xx,yy 是亲戚,那么 xx 的亲戚都是 yy 的亲戚,yy 的亲戚也都是 xx 的亲戚。判断两个数据是否在同一集合中,就是去看两个数据所在的结点在不在同一棵树中,即向上找根结点,如果根结点相同,就在同一棵树中,也就是在同一个集合中。把数据所在的集合都合并在一起。因为2,3是一个集合,所以1,2,3,4都是一个集合。
2024-12-31 17:13:11
1387
原创 《算法集训》第1题--01字串
问题描述对于长度为5位的一个01串,每一位都可能是0或1,一共有32种可能。它们的前几个是:00000 00001 00010 00011 00100请按从小到大的顺序输出这32种01串。
2024-12-31 16:08:33
607
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅