深度优先搜索在树的遍历中也称作树的先序遍历。对于树而言,深度优先搜索的思路可以描述为:
(1)将根结点置为出发结点。
(2)访问该出发结点.
(3)依次将出发结点的子结点置为新的出发结点.进行深度优先遍历(执行(2))。
(4)退回上一层的出发结点。
基本框架:(回溯递归实现)
框架一
void dfs(int k) {
for (i = 1; i <= 子状态数; i++) {//产生式
if (满足条件) { //扩展条件
保存结果;
if (到达目的地) {//目标状态
输出解;
}else {
dfs(k+1);
}
恢复: 保存结果之前的状态 { 回溯 }
}
}
}
框架二
void dfs(int k) {
if (到达目的地) { //目标状态
输出解;
}else{
for (int i = 1; i <= 子状态数; i++) {//产生式
if (满足条件) {//扩展条件
保存结果;
dfs(k+1);
恢复: 保存结果之前的状态 (回溯 )
}
}
}
}