CSP 2022 备战 搜索算法

DFS:

深度优先搜索算法,简称深搜,英文名DFS

我们把它想象成一个迷宫,DFS算法的核心思路就是一条路走到黑,不撞南墙不回头

面对岔路,我们无动于衷,选择一条路一直走就是

那么,倘若走的是死胡同怎么办?

DFS提供的思路是:回头是岸,回到上一次选择的路口,选择另一条路走到黑

这种回到上一个路口的方式,称作回溯算法

通过这种算法,我们可以走遍每一个岔路,最终找到出口

DFS的伪代码如下:

 1 void dfs(int k)//k代表递归层数,或者说要填第几个岔路
 2 {
 3     if(所有岔路已经走遍了)
 4     {
 5         判断最优解;
 6         return;
 7     }
 8     for (枚举这个岔路中能构成终点的选项)//这是当终点不唯一时的判断
 9     {
10         if(这个选项是合法的)
11         {
12             记录下这个空;
13             dfs(k+1);
14             取消这个空;
15         }
16     } 
17 }   

 BFS:

广度优先搜索算法,简称光搜,英文名BFS

BFS的算法思路大致是优先考虑每种状态和初始状态的距离,与初始状态越接近的情况越先考虑

所以每个时刻要做的事就是上个时刻每个状态拓展出的新的状态

实现方式是队列


先将初始状态加入队列中,

然后每次都取出队首,

找出队首能访问到的状态,

再将其压入队列,如此反复,直到队列为空

这样就可以保证所采用的是最短路径

posted @ 2022-10-08 22:10  美索maysoul  阅读(91)  评论(1)    收藏  举报