Advertisement

通过数据结构编写代码(44) 检测无向图是否存在环

阅读量:

在研读严蔚敏所著《数据结构》一书第7.5小节时,书中提到“判断有向图中是否存在环路相较于无向图更为复杂。对于无向图而言,在进行深度优先遍历的过程中,若发现回边(即指向已被访问过的顶点的边),则可以确定存在环路”。对此内容理解不够清晰,因此通过网络搜索进行了进一步查阅。

获得启发后,决定记录相关算法与思路,便于日后回顾。

思路如下:

  1. 对于一个包含n个顶点和e条边的无向图,当边数e大于等于顶点数n时,必然存在环路

  2. 若边数e小于顶点数n,则需进行深度优先遍历,并将父节点作为参数传递进去。若在遍历过程中遇到某个已被访问的节点,并且该节点不是当前节点的父节点,则说明存在环路

代码实现如下:

复制代码
 void dfsCycle(Graph g,int curent,int parent,bool * isVisited,bool * is){

    
 	isVisited[curent] = true;
    
 	ArcNode * next = g.list[curent].head->nextArc;
    
 	for (; next != NULL; next = next->nextArc)
    
 	{
    
 		int index = next->adjVex;
    
 		if (isVisited

全部评论 (0)

还没有任何评论哟~