DFS 算法
思想:向深处搜索,直到找到解或者走不下去
BFS算法
数据结构
DFS:使用栈保存未被检测的结点,结点按照深度优先的次序被访问并依次被压入栈中,并以相反的次序出栈进行新的检测。
BFS:使用队列保存未被检测的结点。结点按照宽度优先的次序被访问和进出队列。
用途
DFS多用于连通性问题因为其运行思想与人脑的思维很相似,故解决连通性问题更自然。
BFS多用于解决最短路问题,其运行过程中需要储存每一层的信息,所以其运行时需要储存的信息量较大,如果人脑也可储存大量信息的话,理论上人脑也可运行BFS。
多数情况运行BFS所需的内存会大于DFS需要的内存(DFS一次访问一条路,BFS一次访问多条路)。
风险
DFS容易爆栈(栈不易”控制”),BFS通过控制队列可以很好解决”爆队列”风险。
框架:
BFS:
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const