深度优先搜索与回溯模板类似,深搜三部曲:
void backtracking( 参数 ){
// 终止条件
if( 终止条件 ){
收集结果(通常在叶子节点收集结果)
return;
}
// 单层逻辑(通常为一个for循环,每次循环都继续递归)
for(集合元素集){
// 处理节点的操作
// 递归
// 回溯(还原,撤销对节点的操作)
}
}
<aside> 💡 广搜的搜索方式适合于解决两个点之间的最短路径问题
</aside>
也有一些问题是广搜 和 深搜都可以解决的,例如岛屿问题,这类问题的特征就是不涉及具体的遍历方式,只要能把相邻且相同属性的节点标记上就行。
广搜(bfs)是一圈一圈的搜索过程
使用一个容器保存遍历过的元素,可以使用队列、栈,甚至是数组
一般使用队列