图的遍历算法被用来对图的数据结构进行各种操作。在这篇文章中,我们将使用广度优先的图形遍历算法来检测无定向图中的周期。
什么是图中的周期?
如果我们从一个顶点开始,只穿越一条或多条边,就能到达同一个地方,我们就说图中存在一个循环。换句话说,如果我们可以从一个顶点出发,在穿越一条或多条边后只到达同一个顶点,那么我们就说该图中存在一个循环。
例如,考虑下面这个图。
Python中的图
在这个图中,我们可以从顶点A开始,在穿越边E2->E5->E4后到达同一个顶点。因此,我们将说该图中存在一个循环。
我们也可以从顶点B开始,沿着E2-E4-E5的路径到达顶点B,因此,我们将再次发现图形中存在一个循环。在这里,你可以看到,我们在遍历路径时只考虑了每条边一次。
相反,请考虑下面这个图。
非周期图
在这里,我们不能在不重复任何一条边的情况下从一个顶点开始到达同一个顶点。因此,我们将说该图不包含任何循环。
检测无定向图中的循环的算法
现在我们对什么是循环有了一个概述,让我们制定一个算法来检测一个无向图中的循环。为此,我们将从源顶点开始,使用广度优先搜索算法遍历图形。在遍历过程中,如果我们发现一个已经被遍历过的顶点,我们将说图中存在一个周期。
检测无向图中的循环的算法可以表述如下。
- 创建一个空队列Q。
- 创建一个visited_vertices列表来跟踪被访问的顶点。
- 将源顶点插入Q和visited_vertices中。
- 如果Q是空的,转到10。否则转到5。
- 从Q中取出一个顶点v。
- 如果v的任何邻居已经出现在visited_vertices中,转到7。否则,转到8。
- 打印图中存在的循环。转到11。
- 在Q和visited_vertices中插入未访问的邻居。
- 转到5。
- 打印图中没有循环。
- 停止。
检测无定向图中周期的Python程序
由于我们已经制定了检测无定向图中的周期的算法,让我们在Python中实现它,并对前面几节中的图片中给出的图执行它。
输出。
结论
在这篇文章中,我们讨论了在无向图中检测周期的算法。 在这里,我们使用了广度优先的图形遍历算法。 要阅读二叉树遍历算法,你可以阅读Inorder树遍历算法或level order树遍历算法。
The postDetect Cycle in an Undirected Graphappeared first onPythonForBeginners.com.