搜索中比较基础也比较重要的就两种 广搜(BFS)和深搜(DFS)
其实搜索可以理解为一种高级的暴力(遍历所有的点),简单的说就是从一个点开始搜索所有可能到达的点
一. 深度优先搜索
可以分为两种一种用递归一种不用递归(不用递归的比较麻烦就不给大家讲了)
首先递归应该都很清楚,不清楚的同学们可以看看下面的这篇文章(讲解的很清楚)https://blog.csdn.net/sinat_38052999/article/details/73303111
主要过程
1.先从一个点出发,不断地走,直到不能走的点或者中点
2.遇到不能走的点时就回到上一个点继续尝试其他的点
一个模板版帮助大家理解:
int dfs(step(步数)和 初始点信息){
if(找到解(终止条件) || 无法继续走下一步(边界条件)){
...
return;
}
枚举下一种情况,dfs(step+1);
}
//和递归比较像
一. 广度优先搜索
要用到队列的知识,不知道的同学看这里 (讲解的也是非常清楚)https://blog.csdn.net/lym152898/article/details/52202606
主要过程:
1.将初始点加入队列。
2.判断队列不为空。
3.将于队首相邻的点加入队列,直到找到目标点。
一个模板供大家理解:
int bfs(){
先初始化队列a
a={起点s};
标记s;
while(a非空){
取a队首元素u;
U出队;
if(u ==目标状态){
.....
}
与u相邻且访问的点进入队列;
标记u为已访问;
}
}