0%

相关的编程题汇总-DFS/BFS

记录了DFS/BFS相关的题目

被围绕的区域

1598364256416

​ 这个题直接找被围绕的区域可能会超时,因为如果测试的矩阵很大,那么中间的元素很多。而直接从四周寻找和边界联通的点,那么可以减少计算量。可以使用广度优先搜索方法 从边界开始的 ‘O’开始 寻找与其联通的其他‘O’并将其一并标记为‘A’

单词接龙

​ 这个题思路不难,很容易想到要用广度优先遍历,寻找起点和终点的最短路径。但是,需要提前建图,再对图用广度优先遍历的方法去寻找起点到终点的最短路径。图以 邻接表的形式保存。但是这种方法有优化的空间。字符串传递 引用的形式传入,否则时间不够

朋友圈

​ 这个题 和上面不一样,朋友圈的模型 给定的就是一个图的邻接矩阵,然后要求这个图中的连通图的个数。这个题一种方法是并查集做 一种是 深度/广度优先遍历,每次遍历与当前节点连接的节点并标记。

太平洋大西洋水流问题

​ 这个题 有两个关键点。一是 想到 从边缘向内部深度优先遍历,标记和边缘相连的点。二是 想到分步完成,记录两个表,分别表示和左上边缘(太平洋) 和 右下边缘(大西洋)相连的点。最后两个表都标记为1 的位置即为 既可以流向大西洋也可以流向太平洋的位置。 ​ 自己在做的时候 不仅没想到 应该从边缘 向内遍历的 方法,也没想到 先判断大西洋连接再判断太平洋连接的操作。直接把两种状态放在一起遍历,考虑得情况很多,很难理清,因为对于一个点向四个方向 分别由遍历得到的四种结果 连接大西洋/太平洋/都不连接/两个都连接。四种结果综合才能确定 当前点的状态,最后想到一个用两位数表示的方法 二进制 11 01 10 00 四个遍历方向 按位 或 == 11则表示该点同时连接 两个洋。虽然此法行得通,但是 每次遍历的状态 只有 11 的情况可以用来剪枝。这种想法其实 和 回溯比较类似。