Algorithm 对于给定的图G=(V,E)和边E∈;E、 设计一个O(n+;m)时间算法,以找到(如果存在)包含E的最短周期

Algorithm 对于给定的图G=(V,E)和边E∈;E、 设计一个O(n+;m)时间算法,以找到(如果存在)包含E的最短周期,algorithm,graph,Algorithm,Graph,试图理解图形,但却很难理解。我知道如何找到最短的路径,但不确定如何找到最短的循环,并且仍然在O(n+m)时间内完成 包含e的最短循环 BFS是完美的。循环将是目标。时间复杂性是相同的 你想要这样的东西(从维基百科编辑): 有关循环和BFS的更多信息,请阅读此链接 那么你的问题是什么?你不会得到任何免费代码:)你应该用什么编程语言来做这件事?我猜O(n+m)你的意思是O(| V |+| E |)?不是真的在寻找免费代码。也许只是一个大概的想法。也许psuedo代码可以最好地实现这一点。是的,我所说

试图理解图形,但却很难理解。我知道如何找到最短的路径,但不确定如何找到最短的循环,并且仍然在O(n+m)时间内完成

包含e的最短循环

BFS是完美的。循环将是目标。时间复杂性是相同的

你想要这样的东西(从维基百科编辑):

有关循环和BFS的更多信息,请阅读此链接

那么你的问题是什么?你不会得到任何免费代码:)你应该用什么编程语言来做这件事?我猜
O(n+m)
你的意思是
O(| V |+| E |)
?不是真的在寻找免费代码。也许只是一个大概的想法。也许psuedo代码可以最好地实现这一点。是的,我所说的“m+n”是指“V+E”定义“循环”。有人可能会说E中的(a,b)已经是长度为2的循环了。非常感谢!这真的很有帮助,还有资源!
Cycle-With-Breadth-First-Search(Graph g, Edge e):

    remove e from E
    root is b where e = (a,b)
    create empty set S
    create empty queue Q      

    root.parent = a
    Q.enqueueEdges(root)                      

    while Q is not empty:

        if current = a
            return current

        current = Q.dequeue()
        for each node n that is adjacent to current:
            if n is not in S:
                add n to S
                n.parent = current
                Q.enqueue(n)