好,我昨天说的,要写BFS的模板,那我今天就详细的讲讲。
按三步走。
-思路
-模板
-题目及总结
好勒,我们开始吧。
BFS
思路:横向搜索

先找邻近的,邻近的再找第二层……以此类推,可以求最短路径。
格式:
while(!q.empty()){
k=q.front();
q.pop();
if(满足要求){//这里通常用一个循环
改变;
if(他是要找的){
记录/输出……
return;
}
q.push(m);
}
}
特别的,宽搜叫以空间换时间。
给点题……

我:很简单吧😄
someone:……
DFS
思路:深处搜索

一个劲走到底,穷途末路才回首返回……似乎这图不够劲,看不出深搜的力量,不如这一个:

凑活凑活,就这样吧,如果要求9号元素,特费时间;如果要求5号元素,走了弯路……这就是dfs的问题。关键是,dfs,节省空间。所以验证了那一句,省时省空间,两者二选一(额……你二选零,我也挡不住你)。
格式:
void dfs(int step)
{
if(到达边界)
{
操作;
(return;)//这视情况而定
}
// for循环等尝试每种可能
{
if(满足条件){
标记;
dfs(step+1);//继续下一步
恢复初始状态;
//其实有时适当的不恢复叫剪枝,是一种优化
}
}
}
相对的,这是用时间换空间,当然是以空间为重,虽然不建议。
dfs,又名搜索与回溯,在恢复原始状态这一步,这叫回溯。回溯就是:碰壁,就换方向尝试,不然就返回。
给点题:

好勒,这些题,还行吧,就有那么一点点难——
big,big,big,big,big,......problem...
今天就到这,再见。