搜索
文章平均质量分 68
不 彳亍
这个作者很懒,什么都没留下…
展开
-
搜索之广搜变形
有的时候我们会遇到边权不为1的图,求最短路径。我们第一时间考虑到的是dijstra算法。这个算法的思路是什么?我们假设用一个数据结构ds维护遍历到的节点到起始节点a的距离。这个ds中肯定有一个最小值len,len对应的节点b到节点a的最短距离即为len。为什么呢?ds中的其他距离都大于len,那么从这些节点扩展到a的距离也一定大于len,而还未遍历到的节点到起点的距离还要长。因此当b第一次出队时,就可以保证已经求出了它到起点的最短距离。需要注意的是一个节点可能被入队多次,我们最好记录它们是否出队,因为第n次原创 2021-03-14 19:21:16 · 135 阅读 · 0 评论 -
搜索之广度优先搜索
广度优先搜索按层次遍历决策树。队列中的元素满足“两端性”和“单调性”,因此它能够求出某一状态到起始状态的“最短路径”。如果把分支的看作边权为1的边,也就相当于求出了最短路。 BFS一般都会给你一个二维矩阵,然后告诉你或者可以转换为求从某一状态到另一状态的最短距离。 立体推箱子 把每一个状态看作一个节点,状态的分支看作边权为1的边,题目相当于求边权为1的图的最短路径。 矩阵距离 多源BFS问题。把矩阵看作边权为1的图,1代表的点是起点,题目相当于求图的任一节点到起点的最短距离。 多源Bfs的做法是把所有起点入原创 2021-03-14 18:57:03 · 135 阅读 · 0 评论 -
搜索之深度优先搜索
学了算法竞赛进阶指南的DFS章节后,我对“状态”和“阶段”有了更深刻的理解。 阶段:问题是被一步步解决的。面临的每一个步骤都是一个“阶段”。 状态:状态表示每个阶段开始所处的自然状况或者客观条件。 小猫爬山 我们可以依次把每只小猫放到缆车上。 第一个思路是枚举缆车数量,再放小猫。每只小猫可以放到这些缆车中的任何一个。依次搜索每只小猫,会超时。仔细观察,对于第一只小猫,它放到任何一个缆车上都是等价的。因此会有很多冗余情况。 第二个思路是直接放小猫。对于每个状态,我们只需要知道是 枚举的是第几只小猫,有几架缆车原创 2021-03-07 21:27:41 · 180 阅读 · 0 评论