当前位置: 首页 > 知识库问答 >
问题:

区分负循环中的节点和负循环中可到达的节点

邹慈
2023-03-14

我在看威廉姆·菲斯特的关于贝尔曼·福特算法的视频。

他提到有一种方法可以区分负循环中涉及的节点和10:20时从负循环中可到达的节点。在单源最短路径算法中,这两类节点会导致负inf距离。

我想知道如何做到这一点,但我想不通。我谷歌了一下,但谷歌总是让我了解贝尔曼-福特算法的介绍。

简言之,是否有一种方法来区分负循环中的节点和从负循环中可到达的节点?那么,仅仅通过修改贝尔曼-福特算法就可以得到什么呢?

共有1个答案

全心思
2023-03-14

>

在检测到负循环的每个SCC中的任何节点上运行多源BFS或DFS。在(1)中未检测为负循环节点的所有可到达节点都将是负循环的可到达节点。

总复杂度为O(| V |*| E |)。

 类似资料:
  • 我有一个基本的链表问题,我在下面试图解决。如果您能为我的方法、算法的正确性(甚至是编码风格)提供任何信息,我将不胜感激。该问题需要一个函数,该函数删除循环链表中所有出现的int,并返回列表中的任何节点或NULL(当列表为NULL时)。 以下是我目前掌握的一些C代码:

  • 我试图找到图G中最负循环的路径,它从指定的源节点S开始和结束。 我研究了Bellman-Ford算法(以下称为“Huang算法”)的应用/扩展,该算法描述了如何找到从指定节点可到达的负循环。然而,这并不能确保从S开始的“全周期”- 以下是我目前对此主题的研究: 在Bellman-Ford算法的第n次迭代中,如果一条边可以松弛,则该图包含一个负循环。使用Huang算法,我可以通过前置字典追溯负循环的

  • 如果唯一的问题是循环数两次,我可以把结果减半,但我希望每个循环只走一次。同样的算法可能对其他事情有好处。

  • 我尝试实现循环链表的insert方法。我想我取得了一些成功。 问题:当我显示列表时。display方法将循环,因为链接的每个next变量都链接到一个非Null节点对象。所以head永远不会是空对象。根据我对单链表的回忆,head总是指向列表中的第一个节点或其中包含数据的第一个节点。 我对循环链表的概念理解:根据我的理解,循环链表有点像一个单链表,但有一点小的变化:尾部对象的下一个变量指向头部。 来

  • 最近,我已经完成了检测循环中第一个节点的算法,如下所述:- 注:本声明摘自以下网站:- http://javabypatel.blogspot.in/2015/12/detect-loop-in-linked-list.html 步骤1:找到循环后,两个指针都指向在循环内的交汇点的公共节点, 步骤2:现在,在它们之间移动一个指针(比如乌龟)到列表的头部,保持野兔指针在循环内的交汇点的相同位置。 步

  • 我理解得对吗?(从虚拟节点开始) dummy->a->b->c->d->dummy(环绕到dummy节点) 因此,如果我想删除第一个实际的数据段(A),我需要将它分配给一个临时变量。所以Node first=head.next。然后我需要有一个虚拟的头部引用“B”,所以我需要做head.next=first.next。这就是所有需要做的吗? 在从列表中删除任何节点N的情况下(假设它在列表中),这是