Main Content

hascycles

确定图是否包含循环

自 R2021a 起

说明

如果图 G 包含一个或多个循环,则 tf = hascycles(G) 返回逻辑值 1 (true),否则返回逻辑值 0 (false)。

示例

示例

全部折叠

创建并绘制一个无向图。

G = graph([1 1 1 1],[2 3 4 5]);
plot(G)

Figure contains an axes object. The axes object contains an object of type graphplot.

确定图是否有循环。

tf = hascycles(G)
tf = logical
   0

现在,在图中的节点 2 和节点 3 之间添加一条边。重新绘制该图。

G = addedge(G,2,3);
plot(G)

Figure contains an axes object. The axes object contains an object of type graphplot.

确定新图是否有循环。

tf2 = hascycles(G)
tf2 = logical
   1

检查对有向图进行操作的 hascyclesisdag 函数之间的区别。

创建并绘制一个有向图。

s = [1 1 1 2 3 3 3 4 6];
t = [2 4 5 5 6 7 4 1 4];
G = digraph(s,t);
plot(G)

Figure contains an axes object. The axes object contains an object of type graphplot.

确定该图是否包含循环。

tf = hascycles(G)
tf = logical
   1

当有向图包含循环时,hascycles 返回 true

现在,使用 isdag 确定该图是否为有向无环图。

tf2 = isdag(G)
tf2 = logical
   0

isdag 返回 false,因为图包含循环。一般情况下,对于有向图,hascyclesisdag 函数返回相反的结果。

输入参数

全部折叠

输入图,指定为 graphdigraph 对象。可使用 graph 创建一个无向图,或使用 digraph 创建一个有向图。

示例: G = graph(1,2)

示例: G = digraph([1 2],[2 3])

详细信息

全部折叠

图循环

如果图中有一条非空路径,其中只有第一个和最后一个节点重复,则图中就存在一个循环。循环的一个示例是:(节点 1 - 节点 2 - 节点 3 - 节点 1)。

一个循环不能对同一条边遍历两次。例如,无向图中的循环(节点 1 - 节点 2 - 节点 1)仅在连接结点 1 和节点 2 的边不止一条的情况下才存在。根据此定义,自环算作循环,尽管它们不能作为任何更大循环的一部分。

版本历史记录

在 R2021a 中推出

另请参阅

| |