这周的主题是基本的搜索算法,基于bfs(广度搜索)和dfs(深度搜索)来实现的
在这里简单介绍以下dfs(深度搜索)算法
这里的关键点是递归和回溯
深度优先搜索算法(DFS)是一种用于遍历或者搜索树或图的算法,沿着一些树遍历树的结点,尽可能深的搜索树的分支,当节点的所在边都被探索过,搜索将回溯到发现结点v的那条边的起始结点.这一过程持续到发现原节点可以到达的所有节点位置。
深度优先搜索的步骤分为 1.递归下去 2.回溯上来。顾名思义,深度优先,则是以深度为准则,先一条路走到底,直到达到目标。这里称之为递归下去。
否则既没有达到目标又无路可走了,那么则退回到上一步的状态,走其他路。这便是回溯上来。
下面来结合具体例子来进行理解
假设按照以下的顺序来搜索:
1.V0->V1->V4,此时到底尽头,仍然到不了V6,于是原路返回到V1去搜索其他路径;
2.返回到V1后既搜索V2,于是搜索路径是V0->V1->V2->V6,,找到目标节点,返回有解。
这样搜索只是2步就到达了,但是如果用BFS的话就需要多几步。
DFS的核心伪代码(C语言递归方式)
//它的前置条件是标记已经走过的路径,让book