数据结构之图的遍历
作者:互联网
一、图的遍历概念
定义:从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每一个顶点仅被访问一次,就叫做图的遍历,他说图的基本运算。
遍历的实质:找每个顶点的邻接点的过程。
特点:因为图中是多对多,所有图中有可能存在回路,且图的任一顶点都可能与其他顶点相通,在访问完某个顶点之后可能沿着某些边又回到了曾经访问过的顶点。
避免重复访问思路:设置辅助数组visited[n],用来标记每个被访问过的顶点。
初始状态visited[i]为0,顶点被访问可以修改为1,防止多重被访问
二、图的遍历常用算法
1.深度优先搜索(Depth_First Search——DFS)
理解:选择随机一条路一直走到底,开始回退上一步,判断还有其他的路吗,如果有继续走,直到否则继续回退,直到回退到开始位置,判断是否还有未遍历的,如果没有表示全部已经遍历完毕。
选择的开始不一样,遍历结果也不同。类似于树的先根遍历
(1)邻接矩阵表示的无向图深度遍历实现:
void DFS(AMGraph G,int V) { // 图G为邻接矩阵类型,v为起始顶点
cout << v; visited[v] = true // 访问第v个顶点,修改辅助数组表示已被访问
for(w=0;w<G.vexnum;w++) { // 依次检测邻接矩阵v所在的行
if((G.arcs[v][w] != 0) && (!visited[w]))
DFS(G,w)
// w是v的临界点,如果w未访问,则递归调用DFS
}
}
稀疏图适合邻接表上进行深度遍历,
稠密图适合在邻接矩阵上进行深度遍历,
(2)非连通图的遍历:
通过连通分量 来判断 是否还有还有 生成树中的连通图 未被遍历
2.广度优先搜索(Breadth_First Search——BFS)
标签:连通,遍历,邻接矩阵,访问,图中,顶点,数据结构,之图 来源: https://www.cnblogs.com/kongxudeshenghuo/p/16143866.html