设为首页 - 加入收藏
广告 1000x90
您的当前位置:金沙9001链接 > 金沙js官网 > 正文

判断有向图是否有圈

来源:未知 编辑:admin 时间:2020-01-04

  的顶点的一种排序:如果存在一条vi到vj的路径,则vj排在vi后面(因为只要满足这个特性就是拓扑序列,所以它不一定是唯一的)。比如在众多的大学课程中,有些课有先修课,我们可以将其抽象为拓扑排序,有向边(v, w)表明课程v必须安排在w之前,否则课程w就无法进行。我们可以想象所有的课程以及课与课之间的关系可以用一个图来表示,而拓扑排序就可以知道课程安排的顺序。然而,如果图存在圈,就没有拓扑序列。比如如果要上课程A必须上课程B,要上课程B必须上课程C,而要上课程C必须上课程A,你将无法选择哪门课上前面。虽然有圈图没有拓扑序列,但是我们可以利用拓扑排序的算法来判断一个有向图是否有圈。

  2. 每次从队列中弹出一个顶点v(即访问到该顶点,counter++)直到队列为空;

  5. 若counter == N也就是所有顶点均访问到,说明排序完成。否则,说明总

  关于DFS的介绍请戳我,通过稍微修改DFS,利用递归的特点,也可以判断有向图是否有圈。修改想法是把原来的visited[]只有true,false两种状态改成如下:

  上述利用DFS判断有向图是否有圈实际上是利用了深度优先生成树的性质:有向图无圈当且仅当其深度优先生成树没有回退边, 而上述算法中的vis[graph[u][i]] == -1就是代表有一条u到i的回退边。这篇博客是关于深度优先生成树的介绍:深度优先生成树及其应用。

模板天下 金沙9001链接 联系QQ:000001 邮箱:0000001@qq.com

Copyright © 2002-2011 金沙9001链接 版权所有

Top