深度优先搜索
程序员文章站
2022-03-13 22:06:56
...
深度优先搜索,简称深搜,其原理比较简单,说白了就是一条道走到黑,没有可以访问的点时,就回退,再重复上述步骤
如上图所示,可以写出其深度优先搜索遍历顺序为:1,11,12,13,10,14,8,9,2,3,7,6,4,5
这个序列是怎么来的?
首先深搜要用到一个存储结构,栈,栈的特点:先进后出
具体过程如下图所示:
12没有邻接点没有被访问过,所以12出栈,13入栈
13没有邻接点,13出栈,10,14先后入栈
14没有没有访问过的邻接点,14出栈,8,9依次入栈
此时9,8,10,11都没有没有被访问过的邻接点,所以,这些点依次出栈,1还没被访问的邻接点2入栈,依次重复 这个过程,直到所有的点都被访问过,深度优先搜索遍历过程结束
这个过程可以用递归去实现(递归的本质就是用栈存储了数据):
大致过程代码如下:
代码实现功能为从起点开始深度优先搜索遍历,看是否能查找到终点
bool Dfs(V)
{
if( V 为终点)
return true;
if( V 为访问过的点)
return false;
将V标记为访问过的点;
对和V相邻的每个节点U
{
if( Dfs(U) == true)
return true;
}
return false;
}