深度优先搜索(DFS)
来源:互联网 发布:java 中的super this 编辑:程序博客网 时间:2024/05/12 18:46
1.主要思想
深度优先搜索算法(Depth-First-Search),是搜索算法的一种。是沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所有边都己被探寻过,搜索将回溯到发现节点v的那条边的起始节点。这一过程一直进行到已发现从源节点可达的所有节点为止。如果还存在未被发现的节点,则选择其中一个作为源节点并重复以上过程,整个进程反复进行直到所有节点都被访问为止。属于盲目搜索。
2.方法步骤
1)选取图中某一顶点Vi为出发点,访问并标记该顶点;
2)以Vi为当前顶点,依次搜索Vi的每个邻接点Vj,若Vj未被访问过,则访问和标记邻接点Vj,若Vj已被访问过,则搜索Vi的下一个邻接点;
3)以Vj为当前顶点,重复步骤2),直到图中和Vi有路径相通的顶点都被访问为止;
4)若图中尚有顶点未被访问过(非连通的情况下),则可任取图中的一个未被访问的顶点作为出发点,重复上述过程,直至图中所有顶点都被访问。
3.实例
从v0出发查找一个长度为4的路径
4.代码
1. /**
2. * DFS核心伪代码
3. * 前置条件是visit数组全部设置成false
4. * @param n 当前开始搜索的节点
5. * @param d 当前到达的深度
6. * @return 是否有解
7. */
8. bool DFS(Node n, int d){
9. if (isEnd(n, d)){//一旦搜索深度到达一个结束状态,就返回true
10. return true;
11. }
12.
13. for (Node nextNode in n){//遍历n相邻的节点nextNode
14. if (!visit[nextNode]){//
15. visit[nextNode] = true;//在下一步搜索中,nextNode不能再次出现
16. if (DFS(nextNode, d+1)){//如果搜索出有解
17. //做些其他事情,例如记录结果深度等
18. return true;
19. }
20.
21. //重新设置成false,因为它有可能出现在下一次搜索的别的路径中
22. visit[nextNode] = false;
23. }
24. }
25. return false;//本次搜索无解
26. }
- 深度优先搜索 (DFS)
- 深度优先搜索(DFS)
- 深度优先搜索(DFS)
- DFS(深度优先搜索)
- 深度优先搜索(dfs)
- DFS(深度优先搜索)
- 深度优先搜索 (DFS)
- 深度优先搜索(DFS)
- 深度优先搜索(dfs)
- 深度优先搜索(dfs)
- 深度优先搜索(dfs)
- 深度优先搜索(DFS)
- 深度优先搜索(DFS)
- 深度优先搜索(dfs)
- 深度优先搜索(DFS)
- 深度优先搜索 DFS
- 深度优先搜索 DFS
- DFS 深度优先搜索
- 阿里云linux环境安装php fileinfo扩展
- HTML2.1
- 基数排序
- JNIEnv详解
- ccf 20140902 画图
- 深度优先搜索(DFS)
- web前端iframe相互调用方法详解
- zookeeper入门
- 12:计算2的N次方
- 猴王问题js
- tfidf算法+余弦相似度算法计算文本相似度
- source insight使用方法简介
- 一致性Hash算法
- JS生成 UUID的四种方法