文档帮助中心文档
在图中找到所有的循环
周期= allcycles (G)
[循环,Edgecycles] = Allycles(g)
[___]=所有周期(G、名称、值)
例子
周期= allcycles (G)返回所有周期在指定的图形中。输出周期是一个单元阵列,其中每个单元的内容周期{k}列出构成一个循环的节点。
周期= allcycles (G)
周期
G
周期{k}
[周期那边缘环]=所有周期(G)还返回每个周期中的边缘。输出边缘环是一个单元格数组,其中边环{k}给出相应周期的边缘,周期{k}。
[周期那边缘环]=所有周期(G)
边缘环
边环{k}
[___]=所有周期(G那名称,值)使用一个或多个名称值参数指定其他选项。您可以在以前的语法中使用任何输出参数组合。例如,您可以指定最大循环以及限制返回的循环数的标量。
[___]=所有周期(G那名称,值)
名称,值
最大循环
全部折叠
创建一个有9个节点的有向图。画出图。
s=[1236546987];t=[236524194198774];G=有向图(s,t);绘图(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返回每个循环中包含的边。这对于多重图特别有用,其中需要边索引来唯一标识每个循环中的边。
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));
计算图形中的所有循环。指定两个输出参数以同时返回每个循环中边的边索引。
[周期,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)
使用'maxnumcycles'那“MaxCycleLength”,及“MinCycleLength”限制返回的循环次数的选项allcycles。
'maxnumcycles'
“MaxCycleLength”
“MinCycleLength”
为具有20个节点的完整图创建邻接矩阵。从邻接矩阵创建无向图,忽略自循环。
一个= 1 (20);图G = (,'omitselfloops');
由于图中的所有节点都连接到所有其他节点,图中有大量的循环(超过1.7 e17)。因此,计算所有周期是不可行的,因为结果将不适合内存。相反,计算前10个循环。
1.7 e17
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]}
检查cyclebasis和allcycles函数随图形中边的数量缩放。
cyclebasis
创建并绘制正方形网格图,正方形的每一侧有三个节点。
n = 5;a = delsq(numgrid(“年代”, n));图G = (,'omitselfloops');情节(g)
使用。计算图中的所有周期allcycles。使用Tiledlayout.函数构造子图数组,并突出显示子图中的每个周期。结果表明,图中总共有13个循环。
Tiledlayout.
[周期,edgecycles] = allcycles (G);Tiledlayout.流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,边环{k},“EdgeColor”那'r'那“NodeColor”那'r')头衔(“循环”+ k)结束
其中一些周期可以看作是较小周期的组合cyclebasis函数返回循环的子集,以图形中的所有其他周期形成基础。用cyclebasis计算基本周期的基础,并在子图中突出显示每个基本周期。尽管图中有13个循环,但只有4个基本循环。
[周期,Edgecycles] = CycleBasis(g);Tiledlayout.流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”,边环{k},“EdgeColor”那'r'那“NodeColor”那'r')头衔(“循环”+ k)结束
现在,将方形图每侧的节点数从三个增加到四个。这表示图的大小略有增加。
n=6;A=delsq(numgrid(“年代”, n));图G = (,'omitselfloops');图绘图(g)
用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)结束
对于某些图结构来说,循环数的大量增加和图的大小的微小变化是典型的allcycles可以随图中的边数呈指数增长。但是cyclebasis最多可以与图中的边缘数线性成长。
图
有向图
输入图形,指定为a图或有向图对象。使用图创建无向图或有向图创建有向图。
例子:G=图(1,2)
G=图(1,2)
例子:G =有向图([1,2],[2 3])
G =有向图([1,2],[2 3])
指定可选的逗号分隔的对名称,值论据。的名字参数名和价值是对应的值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数名称1,值1,…,名称,值。
的名字
价值
名称1,值1,…,名称,值
allcycles (G, MaxNumCycles, 100)
最大循环次数,指定为逗号分隔对组成'maxnumcycles'和一个非负整数标量。当图中的周期数增长到足以达到内存限制时,此选项非常有用。您可以指定最大循环来限制返回的循环次数allcycles使结果适合可用内存。
例子:allcycles (G, MaxNumCycles, 100)
最大循环长度,指定为逗号分隔的配对组成“MaxCycleLength”和正整数标量。此选项过滤allcycles这样就不会返回长度大于指定极限的循环。循环的长度是通过循环中的边数来测量的,忽略边的权重。
找到一系列长度的周期,指定两者“MaxCycleLength”和“MinCycleLength”。要查找具有精确指定长度的周期,请为两者指定相同的值“MaxCycleLength”和“MinCycleLength”。
例子:所有循环(G,'MaxCycleLength',4)返回长度小于或等于4的循环。
所有循环(G,'MaxCycleLength',4)
例子:Allyce(g,'mincyclelelength',3,'maxcyclelength',5)返回长度为3,4或5的循环。
Allyce(g,'mincyclelelength',3,'maxcyclelength',5)
最小循环长度,指定为逗号分隔对组成“MinCycleLength”和正整数标量。此选项过滤allcycles这样就不会返回长度小于指定极限的循环。循环的长度是通过循环中的边数来测量的,忽略边的权重。
例子:Allycles(g,'mincyclelight',2)返回长度大于或等于2的循环。
Allycles(g,'mincyclelight',2)
图形循环,作为单元格数组返回。每个元素周期{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在这些情况下。
G=图(一(12))
最大循环长度
最小循环长度
所有路径|cyclebasis|有鲸鱼
所有路径
有鲸鱼
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,以便在可用的地方进行翻译的内容,并查看本地活动和优惠。根据您的位置,我们建议您选择:。
您还可以从以下列表中选择网站:
选择中国网站(以中文或英文)以获取最佳网站性能。其他MathWorks国家网站未优化您的位置。
与当地办事处联系