搜索
文章平均质量分 59
lunch( ̄︶ ̄)
这个作者很懒,什么都没留下…
展开
-
[CSP-J 2019] 零件加工
编号为 2 的工人想生产第 2 阶段的零件,需要编号为 1 和 3 的工人生产第 1 阶段的零件,他/她们都需要编号为 2 的工人提供原材料。编号为 1 的工人想生产第 2 阶段的零件,需要编号为 2 的工人生产第 1 阶段的零件,需要为编号 1 和 3 的工人提供原材料。编号为 3 的工人想生产第 2 阶段的零件,需要编号为 2 的工人生产第 1 阶段的零件,需要编号为 1 和 3 的工人提供原材料。编号为 2 的工人想生产第 1 阶段的零件,需要编号为 1 和 3 的工人提供原材料。原创 2024-05-29 20:24:19 · 519 阅读 · 0 评论 -
[NOIP 2014] 寻找道路
如上图所示,满足条件的路径为 1→3→4→5。注意点 2 不能在答案路径中,因为点 2 连了一条边到点 6,而点 6 不与终点 5 连通。然后看每个点,看每个点连出的每条边,如果发现这个点连着一个刚才没有被标记的点,就说明这个点是不符合题目要求的点,就不能用。起点 1 与终点 3 不连通,所以满足题目描述的路径不存在,故输出 −1。我们需要关注有哪些点是直接或间接与终点相连的,这就可以建立反向图由终点开始搜索了,DFS 或 BFS 都可以。最后在正向图上 BFS,只走符合要求的点。原创 2024-05-27 20:54:16 · 512 阅读 · 0 评论 -
BFS迷宫游戏(c++)
用 DFS 求解迷宫最短路有一个很大的缺点,需要枚举所有可能的路径,读入的地图一旦很大,可能的搜索方案数量会非常多,用 DFS 搜索显然效率会很低。由于 BFS 是分层搜索,因此,第一次搜索到终点的时候,当前搜索的层数就是最短路径的长度。搜索过程中第一次搜索到终点的时候是最短距离,所以可以让。等于 −1,表示这个点是第一次搜索到的点,需要更新。数组初始化为 −1,搜索过程中如果刚搜索到的点的。如果我们要求解起点到某个点的最短距离时,可以设置。记录起点到达每个点的最短距离。原创 2024-05-20 18:37:45 · 375 阅读 · 0 评论 -
8皇后问题(c++)
因为我们是逐列放置的,所以列内是不会冲突的,对于行也很好处理,如果某行被占用了,只需要用一个数组标记即可。N 皇后问题是一个经典的问题,在一个 N×N 的棋盘上放置 N 个皇后,每行刚好放置一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。从第 0 列开始,我们依次给每一列放置一个皇后,对于一个确定的列,我们只需要去枚举放置的行即可,在保证放置合法的情况下,一直搜索下去。上图就是一个合法的 8 皇后的解。而这样的对角线上的位置的坐标的行减去列的值也是相同的,都是 −2。原创 2024-05-19 19:52:33 · 717 阅读 · 0 评论 -
连通块(c++)
进行深度优先搜索的次数就是图中的连通块个数,如果我们在每次进行深度优先搜索时,对访问过的点进行不同的标记,就可以记录每个连通块内的顶点有哪些了,也可以跟迷宫问题时一样求解连通块大小,最大连通块等问题。其实之前在迷宫问题的时候,我们谈过连通块,这两个概念其实是一样的,正如本章最开始所说,我们可以把迷宫画成一般的图的样子,而且画出来就是无向图。在无向图上,我们可以利用 DFS 可以求连通块的数量。形象一点说,一个连通块就是一些能互相到达的点形成的图上的一块。在迷宫上的连通块也就是在这个图上的连通块。原创 2024-05-16 18:11:19 · 601 阅读 · 1 评论 -
迷宫游戏(c++)
2.否则我们就需要从该格子出发,可以分别枚举向左、向下、向右、向上四个方向,依次去判断它旁边的四个点是否可以作为下一步合法的目标点,如果可以,那么我们就进行这一步,走到目标点,然后继续进行操作。很明显,当我们从任意格子出发,都有可能往四个方向走:上,下,左,右。而初始的时候,我们是在起点S处,之后开始进行我们的搜索过程,也就是我们要讲的 DFS 算法。3.当然有可能左、下、右、上四个点都无法再成为合法的目标点了,那么我们就回退一步,然后从上一步所在的那个格子向其他 未尝试的方向 继续枚举。原创 2024-05-15 19:15:35 · 764 阅读 · 0 评论