bfs
我要上岸!!!
这个作者很懒,什么都没留下…
展开
-
LeetCode 847 Shortest Path Visiting All Nodes
思路由于是求简单图最小路径问题,所以可以用BFS来解决(最短路模版,每次遍历一层节点)。可以发现,一条路径的最终的长度只与最后一个经过的点有关系,跟访问前面节点的顺序没有关系。所以我们可以用一个二维visit数组记录每种路线终点所对应的路线,避免重复搜索;BFS的队列中存储一维数组node,node[0]:最后一个节点,node[1]:路线对应的整数【在这里将路线压缩成一个整数,原理是使用二进制...原创 2019-10-13 06:55:57 · 334 阅读 · 0 评论 -
LeetCode 269 / LintCode 892 Alien Dictionary
思路【lintcode 892有一个条件不一样:遇到有多个顺序的时候,输出最小的那个】思路:拓扑排序。每个字母都是图中的一个节点,然后通过比较相邻的两个字符串得到具体两个字母的顺序【由于传递性,所以只需要比较相邻两个字符串】。可以使用优先队列来做拓扑排序,这样可以保证取到的顺序一直是最小的。时间复杂度O(naL+2mlogm), n-字符串个数,aL-单词平均长度,m-总字母个数。因为在to...原创 2019-08-10 18:21:21 · 452 阅读 · 0 评论 -
LintCode 433 Number of Islands
思路BFS, 从全图中所有为1的地方开始BFS,向4个方向进行搜索,在将起点加入queue的同时将其标记为0或者开一个visit数组标记已访问。复杂度时间复杂度O(n*m)空间复杂度O(n*m)代码class Coordinate { int x, y; public Coordinate(int x, int y) { this.x = x; ...原创 2019-07-28 11:39:41 · 142 阅读 · 0 评论 -
LintCode 611 Knight Shortest Path
思路BFS,带level信息的坐标型。每次将一层元素都取出来,然后加入队列的时候将其标记为1(障碍)。复杂度时间复杂度O(nm)空间复杂度O(nm)代码/** * Definition for a point. * class Point { * int x; * int y; * Point() { x = 0; y = 0; } * Po...原创 2019-07-29 15:22:47 · 181 阅读 · 0 评论 -
LeetCode 127 Word Ladder
思路隐式图BFS,每一个状态看作图中的每个节点。从起点开始BFS的同时记录level层数,方便返回结果。复杂度时间复杂度为O(n∗26l)O(n*26^l)O(n∗26l)空间复杂度为O(n)O(n)O(n)其中,n为字典大小,l为每个单词的长度代码public class Solution { /* * @param start: a string * ...原创 2019-07-19 15:21:42 · 152 阅读 · 0 评论 -
LeetCode 297 Serialize and Deserialize Binary Tree
思路Serialize:用arraylist代替queue进行bfs,使用index来完成,把所有节点加入一个arraylist,然后再统一转成字符串(StringBuilder)。注意需要在把所有节点加入arraylist后,进行从后往前的删除null值。Deserialize: 同样使用一个arraylist,使用一个index来标记当前根节点,同时使用isLeftChild标记当前应该生...原创 2019-07-07 02:24:16 · 103 阅读 · 0 评论 -
LeetCode 133 Clone Graph
思路【BFS遍历有向图(树)不需要visit,无向图上需要visit】思路1:bfs遍历整张图,注意需要加上visit来判断节点是否被访问过。在放入queue的时候就标记visit。如果visit过,那么就在neighbor列表上加上它;否则就需要建立新node+建立映射+加入neighbor列表。时间复杂度O(n+m)空间复杂度O(n)思路2:同样是bfs遍历整张图,不同的是:首先把所...原创 2019-07-08 15:53:01 · 57 阅读 · 0 评论 -
LeetCode 102 Binary Tree Level Order Traversal
思路BFS,但是需要每次将下一层所有节点都放入queue中复杂度时间复杂度O(n)空间复杂度O(n)代码/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(in...原创 2019-06-24 10:32:44 · 46 阅读 · 0 评论 -
LintCode 794 Sliding Puzzle II
思路【注意bfs中,在将一个元素加入queue中后就要标记为visited】隐式图bfs,level-order bfs,记录步数。定义每一个节点为每一个状态(9个位置的数字),边定义为两个状态之间通过移动0一次可以得到,则二者之间有一条边。主要过程就是bfs进行层序搜索。其中一个技巧是将二维数组转化为字符串来保存,这样方便队列操作以及查重等操作。实现了两个函数:(1)matrixToSt...原创 2019-05-10 13:35:21 · 404 阅读 · 1 评论 -
LeetCode 752 Open the Lock (LintCode 796)
思路隐式图bfs,level-order bfs。定义每一个状态为图中的一个节点,例如“0000”。然后每一个节点与其能通过+1/-1转动某一位得到的状态节点之间有一条无向边。然后进行层序bfs遍历,搜索target,并记录层数dist。在实现的时候,可以定义每一层节点都加入过队列之后(筛选过),dist++;定义先尝试计算next,再决定是否将next加入队列(是否为死锁),一旦决定next...原创 2019-04-21 04:54:09 · 156 阅读 · 0 评论 -
LintCode 598 Zombie in Matrix
思路棋盘图bfs。用bfs从zombie开始向人类进行感染(搜索),这里需要一层一层地搜索:bfs中每次将下一层的所有元素都放到队列里(类似二叉树zigzag层序遍历那题),同时将下一层元素从0标记为1,记录层数depth。开始的时候需要记录下人类数量,最后检查人类的数量是否为0,如果不为0说明有的人类无法被感染,返回-1;否则,需要返回depth-1,因为最后无法继续向四周扩展的时候,循环外...原创 2019-04-08 05:23:42 · 387 阅读 · 0 评论 -
LeetCode 286 Walls and Gates
思路思路1:暴力搜索,对每个空房间(INF)进行bfs,不过此时的bfs应该是每次向队列中加下一层的元素而不是单个元素,否则深度会算错。时间复杂度O(n2∗m2n^2 * m^2n2∗m2), 空间复杂度O(n∗mn*mn∗m)思路2:思路1为多源多终点,可以转化为单源多终点(增加一个超级源,最短路常用套路):从所有的门开始搜索,这样可以避免思路1中重复经过某些空房间。在实现的时候忽略了...原创 2019-04-07 16:42:42 · 226 阅读 · 0 评论 -
LeetCode 130 Surrounded Regions
思路bfs搜索,从四周开始灌水,寻找不被x包围的区域,先替换成W。最后再将O换成X, W换成O即可。该题主要是看代码的实现过程和bfs灌水的思想。代码public class Solution { /* * @param board: board a 2D board containing 'X' and 'O' * @return: nothing *...原创 2019-04-07 09:58:10 · 105 阅读 · 0 评论