本专题主要锻炼搜索的两大方法——bfs (宽度优先搜索)和 dfs (深度优先搜索)
===================================华丽的分割线=======================================
一、bfs——宽度优先搜索
bfs主要运用于搜索中求最短时间的问题,搜索过程中一般需要运用 queue 的操作。具体的操作如下:
1.首先需要将 队列 和 visit数组 清空。(这一点很重要!!!)
2.然后将起点信息 push 进队列,标记为visited(修改 visit 数组中元素对应的值),信息一般都用结构体存储,当然,所建立的 queue 也必须是结构体类型的。
3.接下来就是主体了——一个while循环,判断条件为 队列非空。
每次循环,需要取出队首元素,然后 pop 出队首元素。首先判断是否以满足题目要求,满足的话 return 所需要的信息,否则以该元素为中心,遍历四周的节点,如果节点可以到达且未被访问,则将该节点的信息 push 进队列,并标记为visited。重复循环即可。
4.如果到达while循环外面,说明题目的要求无法达到,返回 impossible 即可。
伪代码如下:
Q empty
init state - s
Q push s
visite s
while(Q ! empty)
{
state now = Q front
Q pop
next = update now
if(next not visited)
{
Q push next
visite next
}
}
return impossible
几个注意点:
1.各个数据的清空和初始化
2.遍历四周的节点可以用一个for循环,具体实现方法请看最后的题解。
===============================华丽的分割线的大儿子=================================
二、dfs——深度优先检索
dfs主要运用于