深度优先搜索的模板:
void dfs()//参数用来表示状态
{
if(到达终点状态)
{
...//根据题意来添加
return;
}
if(越界或者是不符合法状态)//剪枝
return;
for(扩展方式)
{
if(扩展方式所达到状态合法)
{
....//根据题意来添加
标记;
dfs();
修改(剪枝);
(还原标记);
//是否还原标记根据题意
//如果加上(还原标记)就是 回溯法
}
}
}
剪枝:
深度优先搜索会遍历万每一种可能的情况,因此往往解决问题时会耗费大量时间,但是可以通过省去一些越界和不合法的状态节省时间,这个省略的步骤被称为剪枝。