主要内容

allcycles

在图中找到所有的循环

描述

例子

周期= allcycles (G返回所有周期在指定的图形中。输出周期是一个单元阵列,其中每个单元的内容周期{k}列出构成一个循环的节点。

例子

[周期边缘环]=所有周期(G还返回每个周期中的边缘。输出边缘环是一个单元格数组,其中边环{k}给出相应周期的边缘,周期{k}

例子

[___]=所有周期(G名称,值使用一个或多个名称值参数指定其他选项。您可以在以前的语法中使用任何输出参数组合。例如,您可以指定最大循环以及限制返回的循环数的标量。

例子

全部折叠

创建一个有9个节点的有向图。画出图。

s=[1236546987];t=[236524194198774];G=有向图(s,t);绘图(G)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

计算图表中的所有循环。

周期= allcycles (G)
周期=5×1单元阵列{[ 1 2 3 6 5 4]} {[1 2 3 6 9 8 5 4]} {[1 2 3 6 9 8 7 4]} {[ 2 3 6 5]} {[ 2 3 6 9 8 5]}

的第二个输出参数allcycles返回每个循环中包含的边。这对于多重图特别有用,其中需要边索引来唯一标识每个循环中的边。

使用八个节点和18个边缘创建定向的多密码。为节点指定名称。用标记的节点和边缘绘制图形。

S = [1 1 2 2 3 3 2 2 4 6 8 6 6 7 3 3 5 3];T = [2 3 1 3 2 1 4 4 6 2 6 7 8 8 5 5 7 7];名称= {'一种''B'“C”' D '“E”“F”‘G’“H”};G=有向图(s,t,[],名称);p=绘图(G,'Edgelabel'1: numedges (G));

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

计算图形中的所有循环。指定两个输出参数以同时返回每个循环中边的边索引。

[周期,edgecycles] = allcycles (G);

在第五周期中查看节点和边。

循环{5}
ans =1 x7单元格{'a'} {'c'} {'e'} {'g'} {'h'} {'h'} {'b'} {'f'} {'b'} {'b'} {'b'}
edgecycles {5}
ans =1×7.2 9 13 17 18 14 3

突出显示第五周期中的节点和边缘。

突出(p,“边缘”, edgecycles {5},“EdgeColor”'r'“线宽”, 1.5,“NodeColor”'r'“MarkerSize”,6)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

使用'maxnumcycles'“MaxCycleLength”,及“MinCycleLength”限制返回的循环次数的选项allcycles

为具有20个节点的完整图创建邻接矩阵。从邻接矩阵创建无向图,忽略自循环。

一个= 1 (20);图G = (,'omitselfloops');

由于图中的所有节点都连接到所有其他节点,图中有大量的循环(超过1.7 e17)。因此,计算所有周期是不可行的,因为结果将不适合内存。相反,计算前10个循环。

cycles1 = allcycles (G,'maxnumcycles',10)
cycles1 =10×1单元阵列{(1 2 3)} {(1 2 3 4)} {(1 2 3 4 5)} {(1 2 3 4 5 6)} {(1 2 3 4 5 6 7)} {(1 2 3 4 5 6 7 8]} {(1 2 3 4 5 6 7 8 9]} {(1 2 3 4 5 6 7 8 9 10]} {(1 2 3 4 5 6 7 8 9 10 11]} {(1 2 3 4 5 6 7 8 9 10 11 12]}

现在计算循环长度小于或等于3的前10个循环。

循环2=所有循环(G,'maxnumcycles'10,“MaxCycleLength”,3)
cycles2 =10×1单元阵列{[ 1 2 3]} {[ 1 2 4]} {[ 1 2 5]} {[ 1 2 6]} {[ 1 2 7]} {[ 1 2 8]} {[ 1 2 9]} {[1 2 10]} {[1 2 11]} {[1 2 12]}

最后,计算具有大于或等于4的循环长度的前10个循环。

Cycles3 = Allycles(g,'maxnumcycles'10,“MinCycleLength”,4)
cycles3 =10×1单元阵列{[ 1 2 3 4]} {[ 1 2 3 4 5]} {[ 1 2 3 4 5 6]} {[ 1 2 3 4 5 6 7]} {[ 1 2 3 4 5 6 7 8]} {[ 1 2 3 4 5 6 7 8 9]} {[ 1 2 3 4 5 6 7 8 9 10]} {[ 1 2 3 4 5 6 7 8 9 10 11]} {[ 1 2 3 4 5 6 7 8 9 10 11 12]} {[1 2 3 4 5 6 7 8 9 10 11 12 13]}

检查cyclebasisallcycles函数随图形中边的数量缩放。

创建并绘制正方形网格图,正方形的每一侧有三个节点。

n = 5;a = delsq(numgrid(“年代”, n));图G = (,'omitselfloops');情节(g)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

使用。计算图中的所有周期allcycles。使用Tiledlayout.函数构造子图数组,并突出显示子图中的每个周期。结果表明,图中总共有13个循环。

[周期,edgecycles] = allcycles (G);Tiledlayout.k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,边环{k},“EdgeColor”'r'“NodeColor”'r')头衔(“循环”+ k)结束

图包含13个轴。循环1的轴1包含一个graphplot类型的对象。循环2的轴2包含一个graphplot类型的对象。循环3的轴3包含一个graphplot类型的对象。带有标题周期4的轴4包含了Type Graphplot的对象。具有标题周期5的轴5包含图案类型的对象。具有标题周期6的轴6包含Type Graphplot的对象。具有标题周期7的轴7包含图案类型的对象。带标题周期8的轴8包含图形类型的对象。带有标题周期9的轴9包含型图谱的对象。 Axes 10 with title Cycle 10 contains an object of type graphplot. Axes 11 with title Cycle 11 contains an object of type graphplot. Axes 12 with title Cycle 12 contains an object of type graphplot. Axes 13 with title Cycle 13 contains an object of type graphplot.

其中一些周期可以看作是较小周期的组合cyclebasis函数返回循环的子集,以图形中的所有其他周期形成基础。用cyclebasis计算基本周期的基础,并在子图中突出显示每个基本周期。尽管图中有13个循环,但只有4个基本循环。

[周期,Edgecycles] = CycleBasis(g);Tiledlayout.k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,边环{k},“EdgeColor”'r'“NodeColor”'r')头衔(“循环”+ k)结束

图中包含4个轴。循环1的轴1包含一个graphplot类型的对象。循环2的轴2包含一个graphplot类型的对象。循环3的轴3包含一个graphplot类型的对象。带有标题周期4的轴4包含了Type Graphplot的对象。

现在,将方形图每侧的节点数从三个增加到四个。这表示图的大小略有增加。

n=6;A=delsq(numgrid(“年代”, n));图G = (,'omitselfloops');图绘图(g)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

allcycles计算新图表中的所有循环。对于该图表,有200多个循环,这太多了,无法绘制。

Allyces(g)
ans =213×1单元阵列{[11 4 3 4 8 7 6 5]} {[11 4 3 4 8 7 6 10 9 5]}} {[11 4 8 7 6 10 11 12 16 15 14 1413 9 5]} {[1 23 4 8 7 6 10 11 15 13 9 5]} {[11 4 3 4 8 7 6 10 13 9 5]} {[11 4 8 7 11 10 6 5]}} {[11 4 48 7 11 10 9 5]} {[1 2 3 4 8 7 11 10 14 13 9 5]} {[11 4 3 4 8 7 16 15 14 10 6 5]} {[1111 12 16 15 14 10 9 5]} {[11 4 3 4 8 7 11 12 16 15 14 13 9 5]} {[11 4 8 7 11 12 16 15 14 14 13 9 10 6 5]}}}}}}}}}}}}}}}}}}} {}}}}}}}} {[1 2 3 4 8 7 11 15 14 10 6 5]} {[11 4 3 4 8 7 11 15 14 10 9 5]} {[11 4 8 7 11 15 14 13 9 5]} {[1 23 4 8 7 11 15 14 13 9 10 6 5]}⋮

尽管图中有大量的循环,cyclebasis仍然返回少量的基本周期。图中的每一个环可以只用9个基本环来构造。

[周期,Edgecycles] = CycleBasis(g);图TileDlayout.k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,边环{k},“EdgeColor”'r'“NodeColor”'r')头衔(“循环”+ k)结束

图包含9个轴。循环1的轴1包含一个graphplot类型的对象。循环2的轴2包含一个graphplot类型的对象。循环3的轴3包含一个graphplot类型的对象。带有标题周期4的轴4包含了Type Graphplot的对象。具有标题周期5的轴5包含图案类型的对象。具有标题周期6的轴6包含Type Graphplot的对象。具有标题周期7的轴7包含图案类型的对象。带标题周期8的轴8包含图形类型的对象。带有标题周期9的轴9包含型图谱的对象。

对于某些图结构来说,循环数的大量增加和图的大小的微小变化是典型的allcycles可以随图中的边数呈指数增长。但是cyclebasis最多可以与图中的边缘数线性成长。

输入参数

全部折叠

输入图形,指定为a有向图对象。使用创建无向图或有向图创建有向图。

例子:G=图(1,2)

例子:G =有向图([1,2],[2 3])

名称-值对的观点

指定可选的逗号分隔的对名称,值论据。的名字参数名和价值是对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数名称1,值1,…,名称,值

例子:allcycles (G, MaxNumCycles, 100)只返回图中的前100个周期。

最大循环次数,指定为逗号分隔对组成'maxnumcycles'和一个非负整数标量。当图中的周期数增长到足以达到内存限制时,此选项非常有用。您可以指定最大循环来限制返回的循环次数allcycles使结果适合可用内存。

例子:allcycles (G, MaxNumCycles, 100)

最大循环长度,指定为逗号分隔的配对组成“MaxCycleLength”和正整数标量。此选项过滤allcycles这样就不会返回长度大于指定极限的循环。循环的长度是通过循环中的边数来测量的,忽略边的权重。

找到一系列长度的周期,指定两者“MaxCycleLength”“MinCycleLength”。要查找具有精确指定长度的周期,请为两者指定相同的值“MaxCycleLength”“MinCycleLength”

例子:所有循环(G,'MaxCycleLength',4)返回长度小于或等于4的循环。

例子:Allyce(g,'mincyclelelength',3,'maxcyclelength',5)返回长度为3,4或5的循环。

最小循环长度,指定为逗号分隔对组成“MinCycleLength”和正整数标量。此选项过滤allcycles这样就不会返回长度小于指定极限的循环。循环的长度是通过循环中的边数来测量的,忽略边的权重。

找到一系列长度的周期,指定两者“MaxCycleLength”“MinCycleLength”。要查找具有精确指定长度的周期,请为两者指定相同的值“MaxCycleLength”“MinCycleLength”

例子:Allycles(g,'mincyclelight',2)返回长度大于或等于2的循环。

例子:Allyce(g,'mincyclelelength',3,'maxcyclelength',5)返回长度为3,4或5的循环。

输出参数

全部折叠

图形循环,作为单元格数组返回。每个元素周期{k}包含属于中某个循环的节点G。每个循环从具有最小节点索引的节点开始,并且循环以词典顺序返回。在单个方向之后只返回无向图形中的周期。如果G不包含任何循环,则周期是空的。

中单元格的数据类型周期取决于输入图形是否包含节点名称:

  • If图G没有节点名,那么每个元素呢周期{k}是节点索引的数值向量。

  • If图G有节点名,然后每个元素周期{k}是字符向量节点名称的单元格数组。

每个循环中的边,作为单元格数组返回。每个元素边环{k}包含相应循环中各边的边索引,周期{k}。如果G不包含任何循环,则边缘环是空的。

更多关于

全部折叠

图周期

图中存在一个循环,其中只有第一个和最后一个节点重复。循环的一个例子是:(Node1-Node2-Node3-Node1)。按照惯例,allcycles不返回周期中的最后一个节点,因为它与第一个节点相同。

一个循环不能两次穿过同一条边。例如,无向图中的循环(Node1 - Node2 - Node1)只有在Node1和Node2之间有多条边连接时才存在。根据这个定义,自循环可以算作周期,尽管它们不能是更大周期的一部分。

提示

  • 图中的圈数在很大程度上取决于图的结构。对于某些图结构,圈数可以随节点数呈指数增长。例如,具有12个节点的完整图,由G=图(一(12))包含近6000万次循环。使用最大循环最大循环长度,及最小循环长度控制输出的选项allcycles在这些情况下。

介绍了R2021a