这是一种算法,我使用psedocode格式使用广度优先搜索来检测图表中的周期:
Select any vertex v0 of G; initialize a queue with v0; mark v0 as visited; set T[v0] := null
while queue is non-empty do
v := front vertex of queue
for each neighbor w of v do
if w is unvisited then
mark w as visited; add w to the queue; T[w] := v
else
if T[v] != w then return ”Cross Edge: Cycle!”
remove front vertex from queue
return ”Graph has no cycles!!"

由于BFS以线性时间运行,这也是线性时间算法吗?我唯一担心的是,由于我们有n-1个边,我们在一个周期中检查n个顶点,这将是一个二次时间算法。我想确保在此之前我能抓住这个循环。