算法概述:搜索,类似于枚举,从头结点开始,搜索发现有一些路可以走,先选择一条,走到一个结点处,重复上述过程,一直走到不能走为止,然后返回上一个结点,选择第二条路,一直检索知道将头结点所有的路走完。
算法图像
如图所示,从1开始,发现可以到达2,开始递归调用,到达2的位置,然后发现,从2可以到达3,再递归调用,到达3,发现3不能再走了,返回到2,发现从2还可以到4,递归调用到达4,发现4也不能走,再次回到2,……,直到2所有的路都走完以后,返回到1,发现从1可以到6,……,当6所有的路径也走完之后,回到1,此时1已经没有任何可以走的路径了,搜索结束。
算法特点:和枚举一样要计算所有的结果,但与枚举不同的是,枚举的循环层数一定,但深度优先搜索的层数不为定值。
搜索部分代码的一般格式
void dfs (int x,int p) { //x代表当前搜索层数,p决定下一次递归的大范围
if ( ) { //如果满足终止条件(找到一组解)
//执行操作
return; //返回上一个函数
}
for (int i = p + 1