文档帮助中心文档
在图中找到所有的循环
周期= allcycles (G)
[周期,edgecycles] = allcycles (G)
[___] = allcycles (G、名称、值)
例子
周期= allcycles (G)返回所有周期在指定的图表中。输出周期单元格数组是否包含每个单元格的内容周期{k}列出构成一个循环的节点。
周期= allcycles (G)
周期
G
周期{k}
[周期,edgecycles) = allcycles (G)还返回每个周期的边。输出edgecycles单元阵列在哪里edgecycles {k}给出相应循环中的边,周期{k}.
[周期,edgecycles) = allcycles (G)
edgecycles
edgecycles {k}
[___) = allcycles (G,名称,值)使用一个或多个名称-值参数指定其他选项。您可以在前面的语法中使用任何输出参数组合。例如,可以指定MaxNumCycles以及限制返回循环次数的标量。
[___) = allcycles (G,名称,值)
名称,值
MaxNumCycles
全部折叠
创建一个有9个节点的有向图。画出图。
S = [1 2 3 6 5 5 4 6 9 8 8 7];T = [2 3 6 5 2 4 1 9 8 5 7 4];G =有向图(s, t);情节(G)
计算图中的所有周期。
周期=5×1单元阵列{[1 2 3 6 5 4]} {[1 2 3 6 9 8 5 4]} {[1 2 3 6 6 9 8 7 4]} {[2 3 6 5]} {[2 3 6 9 8 5]}
的第二个输出参数allcycles返回包含在每个循环中的边。这对于多重图特别有用,因为在多重图中,需要边索引来唯一地标识每个循环中的边。
allcycles
创建一个有8个节点和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 '} {' f '} {' b '}
edgecycles {5}
ans =1×72 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]}
现在计算前10个周期长度小于或等于3的周期。
cycles2 = allcycles (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 = allcycles (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;一个= delsq (numgrid (“年代”, n));图G = (,“omitselfloops”);情节(G)
使用。计算图中的所有周期allcycles.使用tiledlayout函数构造子图数组,并突出显示子图中的每个周期。结果表明,图中总共有13个循环。
tiledlayout
[周期,edgecycles] = allcycles (G);tiledlayout流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”, edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束
其中一些周期可以看作是更小周期的组合。的cyclebasis函数返回构成图中所有其他循环基的循环的子集。使用cyclebasis计算基本周期的基础,并在子图中突出显示每个基本周期。尽管图中有13个循环,但只有4个基本循环。
[周期,edgecycles] = cyclebasis (G);tiledlayout流为k = 1:length(cycles) nexttile highlight(plot(G),cycles{k},“边缘”, edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束
现在,将正方形图每边的节点数从3个增加到4个。这表示图的大小略有增加。
n = 6;一个= delsq (numgrid (“年代”, n));图G = (,“omitselfloops”);图绘制(G)
使用allcycles来计算新图中的所有周期。对于这个图,有超过200个循环,太多了。
allcycles (G)
ans =213×1单元阵列{[8 1 2 3 4 5 6 7]} {(1 2 3 4 5 8 7 6 10 9]} {(1 2 3 4 8 7 6 10 11 12 16 15 14 13 9 5]} {(1 2 3 4 5 8 7 6 10 11 15 14 13 9]} {(1 2 3 4 8 7 6 10 14 13 9 5]} {(1 2 3 4 8 7 11 10 6 5]} {(1 2 3 4 5 8 7 11 10 9]} {(1 2 3 4 5 8 7 11 10 14 13 9]} {(1 2 3 4 8 7 11 12 16 15 14 10 6 5]} {(1 2 3 4 5 8 7 11 12 16 15 14 10 9]} {(1 2 3 4 8 7 11 12 1615 14 13 9 5]}{(1 2 3 4 8 7 11 12 16 15 14 13 9 10 6 5]}{(1 2 3 4 8 7 11 15 14 10 6 5]}{(1 2 3 4 5 8 7 11 15 14 10 9]}{(1 2 3 4 5 8 7 11 15 14 13 9]}{(1 2 3 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},“边缘”, edgecycles {k},“EdgeColor”,“r”,“NodeColor”,“r”)标题(“循环”+ k)结束
对于某些图结构来说,循环数的大幅增加而图的大小只有很小的变化是典型的。返回的周期数allcycles可以随着图中边的数量呈指数增长。但是,返回的周期数cyclebasis最多可以随图中的边数线性增长。
图
有向图
输入图形,指定为图或有向图对象。使用图创建无向图或有向图创建有向图。
例子:图G =(1、2)
图G =(1、2)
例子:G =有向图([1,2],[2 3])
G =有向图([1,2],[2 3])
指定可选的逗号分隔的对名称,值参数。的名字参数名和价值为对应值。的名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家.
的名字
价值
Name1, Value1,…,的家
allcycles (G, MaxNumCycles, 100)
最大循环数,由逗号分隔对组成“MaxNumCycles”和一个非负整数标量。当图中的周期数增长到足以达到内存限制时,此选项非常有用。您可以指定MaxNumCycles来限制返回的循环次数allcycles这样结果就能在可用内存中保存。
例子:allcycles (G, MaxNumCycles, 100)
MaxCycleLength
最大周期长度,指定为由逗号分隔的对组成“MaxCycleLength”一个正整数标量。该选项过滤返回的结果allcycles这样就不会返回长度大于指定限制的循环。一个周期的长度是由其中的边数来衡量的,而忽略了边的权值。
要查找具有一定长度范围的周期,请同时指定这两个周期“MaxCycleLength”和“MinCycleLength”.要找到精确指定长度的周期,请为两者指定相同的值“MaxCycleLength”和“MinCycleLength”.
例子:allcycles (G, MaxCycleLength, 4)返回长度小于或等于4的循环。
allcycles (G, MaxCycleLength, 4)
例子:allcycles (G, MinCycleLength 3 MaxCycleLength, 5)返回长度为3、4或5的循环。
allcycles (G, MinCycleLength 3 MaxCycleLength, 5)
MinCycleLength
最小周期长度,指定为逗号分隔的对,由“MinCycleLength”一个正整数标量。该选项过滤返回的结果allcycles这样就不会返回长度小于指定限制的循环。一个周期的长度是由其中的边数来衡量的,而忽略了边的权值。
例子:allcycles (G, MinCycleLength, 2)返回长度大于或等于2的循环。
allcycles (G, MinCycleLength, 2)
图形循环,作为单元格数组返回。每个元素周期{k}包含属于其中一个周期的节点G.每个循环从具有最小节点索引的节点开始,并按字典顺序返回循环。无向图中的循环只返回一次,遵循一个方向。如果G不包含任何循环吗周期是空的。
中的单元格的数据类型周期取决于输入图是否包含节点名:
如果图G没有节点名,那么每个元素呢周期{k}是节点索引的数值向量。
如果图G有节点名,然后每个元素周期{k}是字符向量节点名称的单元格数组。
每个循环中的边,作为单元格数组返回。每个元素edgecycles {k}包含相应循环中各边的边索引,周期{k}.如果G不包含任何循环吗edgecycles是空的。
当图中存在一条非空路径,其中只有第一个和最后一个节点重复时,图中就存在一个循环。例如:(Node1 - Node2 - Node3 - Node1)。按照惯例,allcycles不返回周期中的最后一个节点,因为它与第一个节点相同。
一个循环不能两次穿过同一条边。例如,无向图中的循环(Node1 - Node2 - Node1)只有在Node1和Node2之间有多条边连接时才存在。根据这个定义,自循环可以算作周期,尽管它们不能是更大周期的一部分。
图中的循环数很大程度上取决于图的结构。对于某些图结构,循环数可以随节点数呈指数增长。例如,一个包含12个节点的完整图图G = ((12))包含近6000万个循环。使用MaxNumCycles,MaxCycleLength,MinCycleLength的输出控制选项allcycles在这些情况下。
图G = ((12))
hascycles|cyclebasis|allpaths
hascycles
allpaths
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
选择一个网站,在那里获得翻译的内容,并看到当地的活动和优惠。根据您的位置,我们建议您选择:.
你也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系