我的第一个BFS,一开始把BFS当做DFS来写,写了半天不得要领,才忽然想到本质上就犯了错误。
后来回想起二叉树的广度优先遍历,才想起队列来实现BFS。
然后就很顺利的写出来了。
BFS就是对队列的操作,要比DFS简洁。
不过今天看黑书写到,BFS通常用OPEN-CLOSE表来代替队列,等着研究一下。
这道题只要求知道求解成功时候遍历的层数,而不要求知道搜索路径,因此队列可以搞定。
在记录层数的时候费了点小脑筋,解决办法是这样的:
用一个EndOfFloor变量来记录每一层的最后一个结点。
首先,这个变量被赋为起始节点,将起始节点出队处理时,会将他的所有下级结点入队,这时将所有下级结点的最后一个赋给EndOfFloor,然后等EndOfFloor所标识的结点再出队时候,同样把它的所有下级结点中的最后一个赋给EndOfFloor,此变量没改变一次,表明搜索深入了一层。
代码如下: