邻接表是图的一种链式存储结构对图的每个顶点建立一个单链表(n个顶点建立n个单链表)
//由于是无向图,存在反向链接 if(!visited[i]) //选取一个未访问过的顶点进行根据邻接表看深度优先优先遍历,如果是连通图DFS只执行一次邻接表是图的一种链式存储结构对图的每个顶点建立一个单链表(n个顶点建立n个单链表)
//由于是无向图,存在反向链接 if(!visited[i]) //选取一个未访问过的顶点进行根据邻接表看深度优先优先遍历,如果是连通图DFS只执行一次本算法以无向网为例存储方式采用邻接链表
1)将该网以邻接链表的方式存储
2)选取A点为起始点,访问此顶点用一个visit的bool型数组记录访问状态(false表示未被访问,true表示已访問)
3)从A的未被访问的邻接点出发根据邻接表看深度优先优先遍历图,直到图中所有和v有路径相通的顶点都被访问到
1)对采用邻接链表作为存储方式的图做DFS时,由于建立邻接链表时可采用不同的插入方法:比如头插法和尾插法会使得做DFS时相同的图结构会有不一样的结果;
2)即使相同的图结构,采用不同的存储方式(邻接矩阵和邻接链表)做DFS时它们的結果有时也会不一样;
笔者认为这都是正常现象,DFS的思想还是没变
本算法的测试用例为《大话数据结构》p239中的图7-5-2。如下图所示:
图论中一个基本的概念就是遍历就是访问到图的每一个顶点,同时每个顶点只访问一次
DFS和BFS的概念和思路网上说明的很详细了。但是网上很多代码实现有缺陷基本都沒有考虑图不连通的情况,比如某个顶点A和其它任何一个顶点都不关联那么这个顶点A就访问不到了。如果遍历的起点刚好是孤立的顶点A就只能访问顶点A了,其它顶点就访问不到了
int index; //邻接顶点在顶点数组中的索引值 //这里我们通过出度表来遍历 //与vertexIndex相邻的顶点并且未访问过的頂点全部入栈 //图并不一定是连通的,因此要确保每个顶点都遍历过 //这里我们通过出度表来遍历 //与vertexIndex相邻的顶点并且未访问过的顶点全部入队 //圖并不一定是连通的因此要确保每个顶点都遍历过版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。