其他分享
首页 > 其他分享> > 数据结构之图的遍历

数据结构之图的遍历

作者:互联网

一、图的遍历概念

定义:从已给的连通图中某一顶点出发,沿着一些边访遍图中所有的顶点,且使每一个顶点仅被访问一次,就叫做图的遍历,他说图的基本运算。

遍历的实质:找每个顶点的邻接点的过程。

特点:因为图中是多对多,所有图中有可能存在回路,且图的任一顶点都可能与其他顶点相通,在访问完某个顶点之后可能沿着某些边又回到了曾经访问过的顶点。

避免重复访问思路:设置辅助数组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