**
广搜与深搜算法
**
**Dfs(深度优先搜索)**大致思路就是——从一个起点一直走,走不通就掉头,然后换一条路继续走。按照一定的规则和顺序不停的去试来找到目标。
有些深搜中为了避免走走过的地方导致死循环,会对走过的情况打上标记,走过了就不再走了,最后走过了一条路并考虑完所有情况时(搜到底不能再搜),再取消掉标记,恢复到初始状态,这就是回溯。
深搜常常用于遍历所有可能情况问题中。有些情况因为要走到尽头才会回到初始的点,所以在一些情景会消耗大量的时间。
Bfs(广度优先搜索)——从起点开始,查看与其相邻并且满足题中条件的周围的所有点(第一层点),然后再以他们为“起点”,再去查看与他们相邻的第二层的点,一层一层的遍历,直到找到目标。
广搜一般用于寻找最小路径等类型题目,因为是层层寻找,所以寻找到的目标一定是最好的解,其大概过程如同一滴水滴到水池产生的水波。但是因为每一次都会一次又一次查找周围的节点,具有盲目性,某些情况占用大量的空间。
实现:
深搜
1.将起始点放入
2.以该起始点向一个方向开始搜索,找到下一个点
3.判断该点是否满足题中条件(如界限,是否走过)然后打上标记
4.判断该点是否为目标点,若是,保存结果 …
5.如果不是,则以该点为新的一个起始点重复先前步骤
6.若起始点衍生出的所有情况皆无可能,则清除标记往另一个方向搜
广搜(常用队列和结构体)假设队列命名为q
1.将起始点放入