一、DFS算法核心思想与难点
【核心思想】不撞南墙不回头,参考:解救小哈——DFS算法举例
【做题难点】维护变量的个数、什么时候标记、什么时候退出、是否需要保存路径、什么时候回溯,可以看下面的几道典型例题,好好揣摩。
二、DFS算法模板
void dfs(int step){
剪枝{
相应操作
return;
}
到达目的地{
更新数据
}
尝试每一种可能{
满足check条件
标记
继续下一步dfs(step + 1)
恢复初始状态(回溯的时候要用到)
}
}
三、PAT中的DFS
DFS属于PAT的基本算法,大题(30分)、小题(25分)都有出现。大概分为两大类,四小类,DFS深搜的是图还是树,是否需要输出路径。
对于图和树,最大的不同是使用的数据结构不同,在DFS还是相当一致;
需要输出路径的话,需要一个单独的数组保存当前路径。
图:不需要记录路径(回溯) 【笨方法学PAT】1003 Emergency(25 分)
图:需要输出路径 1004 Counting Leaves(30 分)
树:不需要记录路径
树:需要输出路径