博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图的深度优先遍历
阅读量:5229 次
发布时间:2019-06-14

本文共 1062 字,大约阅读时间需要 3 分钟。

1.深度优先遍历的递归定义

     假设给定图G的初态是所有顶点均未曾访问过。在G中任选一顶点v为初始出发点(源点),则深度优先遍历可定义如下:首先访问出发点v,并将其标记为已访问过;然后依次从v出发搜索v的每个邻接点w。若w未曾访问过,则以w为新的出发点继续进行深度优先遍历,直至图中所有和源点v有路径相通的顶点(亦称为从源点可达的顶点)均已被访问为止。若此时图中仍有未访问的顶点,则另选一个尚未访问的顶点作为新的源点重复上述过程,直至图中所有顶点均已被访问为止。

  图的深度优先遍历类似于树的前序遍历。采用的搜索方法的特点是尽可能先对纵深方向进行搜索。这种搜索方法称为深度优先搜索(Depth-First Search)。相应地,用此方法遍历图就很自然地称之为图的深度优先遍历。

2.基本实现思想:

(1)访问顶点v;

(2)从v的未被访问的邻接点中选取一个顶点w,从w出发进行深度优先遍历;

(3)重复上述两步,直至图中所有和v有路径相通的顶点都被访问到。

3.

 

1).从0开始,首先找到0的关联顶点3
2).由3出发,找到1;由1出发,没有关联的顶点。
3).回到3,从3出发,找到2;由2出发,没有关联的顶点。
4).回到4,出4出发,找到1,因为1已经被访问过了,所以不访问。
所以最后顺序是0,3,1,2,4
 
下面是基于java的代码实现:
 
1     int visited[] = new int[100];   //存放访问记录 2      int rs[] = new int[100];         //存放访问结果 3       int k = 0;                      //访问结果计数 4  5     void dfs(int[][] map, int v) { 6  7         visited[v] = 1; 8         rs[k++] = v; 9         int column = map.length;10         for (int i = 0; i < column; i++) {11             if (visited[i] != 1 && map[v][i] != 0) {12                 dfs(map, i);13             }14         }15     }

 

转载于:https://www.cnblogs.com/yfyzy/p/4542652.html

你可能感兴趣的文章
两进程的binder应用
查看>>
python3 购物车程序
查看>>
pthread_create 内存泄漏 valgrind
查看>>
大话重构读书笔记——实践篇二
查看>>
升级webpack2
查看>>
sudo cd的错误
查看>>
栈模型的实现--链表实现
查看>>
网络编程 tcp(一)
查看>>
项目群管理
查看>>
前端之CSS
查看>>
Dapper优秀资料
查看>>
[C#6] 6-表达式形式的成员函数
查看>>
POI2014解题报告
查看>>
scapy构造数据包
查看>>
python学习笔记012——pdb调试
查看>>
python从入门到放弃-day05-格式化输出购物车
查看>>
[转]startx启动过程分析
查看>>
牛客小白月赛6
查看>>
iBatis第五章:事务管理
查看>>
leetcode 124. Binary Tree Maximum Path Sum ----- java
查看>>