深度优先搜索(dfs)简称深搜,其状态“退回一步”的顺序符合“后进先出”的特点,所以采用栈贮存状态。
深搜的时间复杂度较小,因为他只储存了从初始状态到当前状态的一条搜索路径。但是,深搜找到的第一个解不一定是最优解,要找到最优解必须搜索整棵“搜索树”。
所以,深搜适用于要求所有解方案的题目。
深搜可以采用直接递推的方法实现,其算法框架如下:
void dfs(dep:integer,//参数表) { //自定义函数 if(//当前是目标状态) { //输出解或者作计数、评价处理 } else for(i=1;i<=状态的拓展可能数;i++) if(第i种状态拓展可行) { //维护自定义参数 dfs(dep+1,参数表); } }