深度优先遍历访问的边集合_深度优先搜索

深度优先搜索也叫DFS。是一种常见的图搜索(遍历)方法。该方法秉承着不到黄河心不死的思路对图中个点进行遍历搜索。

思想:

先沿着一条路遍历(查询)直到这条路不能走的时候,我们再回退到可以走位置继续遍历(查询)

方法(不给详细代码给思路,具体问题有增减很正常):

首先我们遍历的是一个图。G(V,E),G代表该图,V是点的集合,E是边的集合。

1.递归的:

函数1:

1.建立一个数组保存所有点的状况。(是否被遍历过)

2.建立一个数组保存每个点遍历的顺序(就是一个int数组记录第一个点是第几个被遍历的,或者hashMap用点名和他的顺序一一对应)。

3.建立代表初始编号的变量并初始化为1(2,3步如果不在乎顺序可以不用操作)

4.遍历每个点,如果该点没有被访问过,就对该点调用函数2(你可能会想肯定都没有访问过啊,但是在调用函数2时会访问部分后续的节点)

函数2:

1.标记调用点已访问(记录在状态数组中)

2.记录该点的为第几个遍历的,然后使记录顺序的变量加1(结合函数1看是否需要)

3.如果该点是查询的点输出信息并停止(遍历就无视这步)

4.对该点的所有未被访问(就是你没有在状态数组中标记的)的邻接点调用函数2

2.非递归的我们使用栈来储存只用一个函数就可以了

函数3:

1.建立一个栈来储存点

2.同样需要状态数组

3.记录编号的数组同上

4.初始编号为1(3,4依然随情况决定要还是不要)

2.将第一个点压入栈中(没有要求就随意取一个点)

3.当栈不为空时循环做以下的操作(缩进表示循环)

4.将栈首元素出栈,如果要查询就检查该点与需要查询的点是否一致,一致就停止。不需要的话就只出栈。

5.将该点标记为已访问,记录其编号。

6.将其所有的没有访问的邻接点压入栈中。

时间复杂度;

1.使用临接矩阵O(n^2),因为在寻找临接点这步操作的时候临接矩阵会查看所有的点

2.使用临接表O(n+e)因为所有定点的临接点之和就相当于两倍的边。n+2e属于O(n+e)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值