Guunt.Gunnar大学的Brknn.UgT.Brimnn.UgT.BrnMn.Gunar。澳大利亚国立大学ByMcN.C.Ann.EdU.Au.Au.P.介绍。Brendan McKay是一个程序,生成嵌入在球体上的某些类型的图形。*几乎每一个同构类的一个成员被输出,使用的内存量几乎与所产生的图数无关。使用Primtri指南(第4.5版)这一点加上非常快速的运算和仔细的验证,使得程序适合于处理大量的图。关于嵌入的定义是同构的,所以在某些情况下输出可以是同构的抽象图。如果图是连通的,每一个面都与一个圆盘同胚(在这种情况下,这意味着它没有孔)。We can cut a hole in the sphere in the middle of a face and open the sphere into a plane, but we must remember that the outside region is as much a face as the other regions even though it is no longer a disk. The combinatorial structure of a graph drawn on the sphere is represented by the cyclic order of the edges at each vertex, where (according to the arbitrary choice we will adopt) the order is clockwise if we look at the sphere from the outside. a 3------------4 / \ /| / \ b c / | d / \ / | e FIGURE 1. / \ / | / \ / | 0 --------- 2 ---- 1 f g In the above example, the abstract graph is given by the edges a={3,4}, b={2,3}, c={2,4}, d={0,3}, e={1,4}, f={0,2}, g={1,2)}嵌入是以顺时针顺序排列每个顶点:0:D,F 1:E,G 2,B,C,G,F 3:A,B,D 4:A,C,E,注意,循环顺序B,C,G,F与C,G,F,B相同,起始点不重要。在没有平行边的图(多于一个边具有相同端点)的情况下,传统的是以顺时针顺序列出邻居:0:2,3 1:2,4 2:0,3,4,1,3:0,4,2 4:1,2,3,之后,我们将描述一个用循环邻接表表示一些平行边图的偶嵌入的约定。上述图的镜像是“4”-[-2](3)\ \ \ \ \ b/\e·e/d图2,“/\”\“1”-2(-0)g f在定义两个嵌入图的“同构”时,我们可以选择是否自动将一个图及其镜像作为同构。plantri knows both definitions: Let G and H be two connected imbedded graphs with the same numbers of vertices and the same number of edges. An ORIENTATION-PRESERVING (O-P) ISOMORPHISM from G to H is a bijection fv from V(G) to V(H), and a bijection fe from E(G) to E(H), such that (1) If e = {v1,v2} is in E(G), then fe(e) = {fv(v1),fv(v2)} and fe(e) is in E(H). (2) If (e1,e2,...,ek) is the set of edges incident with a vertex v of G, in clockwise order, then (fe(e1),fe(e2),...,f(ek)) is the set of edges incident with the vertex fv(v) of G, in clockwise order. An ORIENTATION-REVERSING (O-R) ISOMORPHISM from G to H is a bijection fv from V(G) to V(H), and a bijection fe from E(G) to E(H), such that (1) If e = {v1,v2} is in E(G), then fe(e) = {fv(v1),fv(v2)} and fe(e) is in E(H). (2) If (e1,e2,...,ek) is the set of edges incident with a vertex v of G, in clockwise order, then (fe(e1),fe(e2),...,F(EK)是以G的顶点Fv(V)为单位发生的一组沿逆时针顺序发生的边。注意两个定义仅在倒数第二个字上有所区别。同构和O-P同构(但不是O-R同构)是等价关系,因此我们可以讨论同构类和O-P同构类。所有同构集和集合所有O-P同构(但不是所有O-R同构的集合):从嵌入图到自身在构图中形成的群:自同构群和O-P自同构群。我们给出嵌入图G,它可以形成另一个嵌入图,称为它的平面对偶(或仅仅是对偶)D。D的顶点是G的面。D的边与G的边是1-1对应的:D中的边的两个端点是G的对应边的两侧。同样地,图2中的图有如下的对偶:{--------------[-[d],[A],[A],[A/A],(3)。D中顶点的边的循环顺序(G是G的面)是G中对应的边包围的顺时针顺序。注意,对偶的π面对应于原始图的顶点。事实上,不难看出嵌入图的对偶是原始图。还注意到,原始图中的2度顶点的存在导致了对偶中的平行边。{如果嵌入图的所有面都是三角形(即3个边的边),则嵌入图称为三角剖分。关于外表面是否是三角形的文献分为两个部分,但我们将认为所有的面都是三角形。三角剖分的对偶是嵌入的三次(三价)图。n个顶点的三角剖分具有精确的3N-6边和2N-4面。对于完整的图K4来说,稍微修改定义是方便的:它是3连通的,但不是4连通的。一个标准定理说三角剖分是3连通的,当且仅当它没有环或平行边时。一个平面图不可能是k连通大于k 5的。{图(嵌入或不)是循环k连通的,如果不可能删除k或更少的顶点,从而图分成至少两个周期的分量。与以前一样,K4被定义为周期性的3连接但不是周期性的4连接。平面图可以具有任意高的循环连通性。在许多情况下,嵌入图的连通性与它的对偶的循环连通性之间存在关系。例如,三角剖分是K连通的,当且仅当它的对偶是周期性的k连接时,简单的图是一个没有平行边或环的图。(i)安装平面。可以从http://cs中获得最新的Primtri。Anu.EdU.Au/~bMd/PrimTrimePrtri。C是一个C文件程序,它被写为一个单文件Primtri C。它应该立即编译与最新的C编译器,因为它只包含非常标准的代码。(我们唯一未测试的是使用16位算术。在UNIX下编译PrimTr.c,你可以使用“CC -O o Primtri -O4 Primtri C”,其中“4”是你的编译器接受的最高数,或者只是使Primtri(但是检查MaFrimeFirst)。运行Primtri。你需要能够输入命令行参数。我们所有的例子都将使用标准UNIX语法。一个Primtri运行的例子是:Primtri D D 16,它使得具有16个顶点的3-连通三角剖分的二元组(因为-D是存在的)。如果可以,请确保类型“int”至少为32位。换言之,它生成了28个顶点的三连通三次平面图。这也可以被定义为“28D”(后缀“D”的意思是“双”),在这种情况下,它通过增加4而被除以2:(28+4)/2=16。在三角剖分的情况下,这个计算得到了面数,这是双立方图中顶点的数目。除了一个强制参数外,还有三种可选参数:* *开关是由一个“-”字引入的。如果有不止一个,它们可以任意连接或分离。它们也可以出现在任何地方。例如,这些命令行都是等价的:{ Primtri -M4U 10×Primtri -U-M4 10×Primtri 10 -UM4- Primtri -U 10 -M4〉在下一节中解释了开关的含义。也就是说,-M是与-M0相同的。*如果你想把图形发送到某个地方而不是标准输出,那么可以给出一个输出文件。除了图形(如统计)以外的信息被写入标准错误流。允许使用一个孤独的“-”来显式地请求图形输出到标准输出。例如:Primtri 20 TI.20-发送20个顶点三角剖分到文件TIL 20。* * RES/MOD对可以被用来只选择一部分图形,否则将产生。这对包括两个整数,其中有“13/100”。第一个整数可以是小于第二个数的0到一个整数。该示例从部分0, 1、…、99选择部分13。总的来说,这100个部分将是所有图形分割成100个大致相等的部分。这是为了使计算任务分为可管理的大小。更多关于RES/MOD对的信息在后面给出。参数和开关可能以任意顺序出现:一个强制参数(顶点数)必须先于任何输出文件或RES/MOD参数。输出格式。如果你计划把图形输入一个需要嵌入的程序,如果你不需要嵌入的话,它是首选格式。然而,它使用的字符不是可打印的,因此它不适合用眼睛来观察。图的顶点由ASCII字符以“A”开头命名。例如:7 BCDEFG,AGFDC,ABD,ACBFE,ADF,AEDBG,AFB,这是一个图,具有7个顶点A,B,C,D,E,F,G。顺时针的‘A’的邻接是B,C,D,E,F,G等等。每张图占用一行输出。ASCII码是方便的,如果你只想用手绘制几张图,就可以选择ASCII码的用法。A·Y边码是平面码的一种替代方案,它可以使所有平面图即使有多个循环也能被明确地编码。选择边缘码的用法是:E.*.Grac6是一个图的抽象结构的紧凑代码。它也局限于简单的图。Grac6是Brendan McKay的“NuTyy”包支持的格式之一。每一个图都占用一条直线,为了选择Grac6代码,使用G.S.SPARSE6是对稀疏图进行优化的图的抽象结构的一个紧凑代码。如果你不想嵌入和处理20个或多个顶点的三次图,SPARSE6是一个不错的选择。SARSESE6是Brendan McKay的“NuTyy”包支持的格式之一。每一个图都占用一行。为了选择SPARSE6代码,使用S.S.*,除了ASCII代码之外,这些格式中的每一个格式都有一个标准的头,它可以在开始时写到输出:默认格式写的格式头。平面代码> PrimARLY代码<<是边缘代码> EdgEy代码<是“图形6> >图形6< NO.SPARSE6> > SARSSE6< <无”,每种情况下,头文件都写在没有结尾字符之后(出于便携性原因)。在默认情况下,写一个标头,而不是反之,则使用-H.S.*,如果你只想计算图表而不写它们,用-U选择不输出。这些格式的细节在附录A.C.杂项交换机中给出。所有其他开关都是在双元之前引用原始图。例如,-M4(最小度至少4)指的是原始图,而不是对偶。如果给出这个开关,则每个O-P同构类中的一个成员被写出来。由于图形6和SPARSE6格式无论如何都不编码嵌入,这个开关对于输出目的是被忽略的。如果使用-G或-S.--O也意味着G.*-G,如果使用插件,这个开关只会引起兴趣(参见附录D)。它确保对每个输出图计算全自同构群。如果你不使用插件,G会使事情慢下来。如果给出-O,则使用π-O群。否则,满组。意味着G.*-V-Primtri将总是告诉你(通过消息到标准错误)产生的图的数目。如果你指定-V,它可能会告诉你一些额外的统计信息。同时,也要告诉你关于同构类的个数,以及同构类的个数,它们是O-P同构于它们的镜像。{在这些指令中,“Primar”这个词是指如果你不使用-D,你将得到的图,而“双”指的是该图的对偶(你用-D来代替)。例如,如果你使用-O,-V将导致它在对偶图中,这意味着最小人脸大小的下界。默认值是-m3..*-c,指定连接的下界。在每一种情况下,将解释双π图中的意义。默认值是-C3..*(-C4具有-Q的稍微弱的含义,参见下面)。{ -x当与C c结合使用时,连接性必须是精确的,而不是至少是π。(下面有一些例外。)现在我们可以解释由Primtri生成的图类。ε-B,但不是-p选择欧拉三角剖分,其中“欧拉”是指每个顶点具有偶数度。对于默认的-M4(最小度始终是4).{ -C3(默认)3-连通欧拉平面三角剖分.双对偶是三连通二次三次图.②-C4-4连通欧拉平面三角剖分.对偶是一个循环的4-连通的二部三次图.(-C3x)-C3和-C4之间的差,即那些具有三角形的非三角形的三连通欧拉平面三角剖分. - M除外在3连通情形中,这些也被称为凸多面体。Note that isomorphism is defined with reference to the imbedding on a sphere, which means that outputs may be isomorphic as abstract graphs if the connectivity is less than 3. -m1 The minimum degree is at least 1. -m2 The minimum degree is at least 2. -m3 (default) The minimum degree is a least 3. -m4 The minimum degree is at least 4. -m5 The minimum degree is at least 5 (and so exactly 5). -c3 (default) The connectivity is at least 3. -c2 The connectivity is at least 2. -c1 The connectivity is at least 1. -c2x The difference between -c2 and -c3, namely connectivity exactly 2. -c1x The difference between -c1 and -c2, namely connectivity exactly 1. If the -c switch is used but not the -m switch, the minimum degree is set to the same value. 例如,-C2与-C2M2相同。如果使用-M开关而不是-C开关,则假定3连通性。这意味着-M1和-M2在没有使用-C1或-C2的情况下是无效的。此外,可以施加两个限制:{ -E E指定边缘数的边界(等于双的边数)。n个顶点的边数可以是从CEL(3n/2),(2n为-M4,CEL(5n/2)为-M5)到3N-6。四个可能的形式:α-ε的数目正好是α-ε:最大的边的α数:α-ε:边数至少为α-ε:从α到α的边数α,只有下界被有效地实现。一般来说,一次完成一系列边沿计数而不是一次边沿计数更为有效。对于n个顶点,最大的人脸大小可以是从3到n-1。这是由-p单独生成的类的一个子集,即二分之一。最小度总是在3以内,所以除-M4,-M5和-F3外,所有可用的参数都可用-p。②对偶是平面欧拉图的一个子类。对于-C3,对偶是3-连通平面欧拉图。这些是嵌入的简单图,具有明显的“外”面。外表面可以是任意大小的(这里称为圆盘大小),但是其他的面必须是三角形。如果没有参数(或0),则所有磁盘大小都是允许的。如果需要所有的磁盘大小,则一次一次地执行一次而不是一次执行的效率要高很多。除了外表面之外,所有顶点都必须具有至少3度的度数。在外表面上,允许5月2日的顶点,根据-m参数。Also, the only 2-cuts which may exist are chords of the outer face: they are permitted for -c2 but not for -c3. Since a vertex of degree 2 on the outer face implies a chord, the combination -m2c3 is the same as -m3c3. The useful combinations of -c, -m and -x are listed: -c3m3 (default) no chords, no vertices degree 2 -c2 chords allowed, no vertices degree 2 -c2x chords required, no vertices degree 2 -c2m2 chords allowed, degree 2 allowed -c2xm2 chords required, degree 2 allowed We have c2P = c3m3P + c2xP and c2m2P = c3m3P + c2xm2P. The output graphs are labelled in such a way that v-w is an edge and the outer face is on the left when looking from v-w, where v is the first vertex and w is the second vertex. For dual output, the first vertex corresponds to the outer face. 对偶图是一个图,除3个顶点外,每一个顶点都有第二个顶点的顶点。当解释输出时,记住外表面是区分的,并且在确定同构时考虑了这一点。这意味着,例如,具有3的外表面的输出将是同构的抽象图,即使在3-连通情况下。这些是简单的平面图,其中每个面都有长度4。C和-M列出:{ -C3M3(默认)3-连通的简单四次图-C2M2任意二元:4-边连通(可能不是简单的)四次多重图-C2最小度3对偶:4-边连通的简单四次图-C4为3连通,没有非面4圈双:3-连通,六圈边连通的(简单)四次图(IF -B,-Q,-P和-P)不存在,图是三角剖分,只受连通度和最小度的限制。对偶图是平面四次图,没有实现。在这种情况下,存在连通性低于3的可能性。{-C,-M,-X和-T的有用组合是:{ -C3M3(默认)3-连通平面三角剖分。该对偶是一个3-连通的平面三次图。原图和对偶图都是简单的。原图和对偶图都是简单的。{ -C5连通平面三角剖分(意味着最小度5)。对偶是一个循环的5连通平面三次图。对偶是一个具有4-连通的平面三次图,其中没有面小于五边形。原始图和对偶图都是简单的。对偶是一个3-连通的平面三次图,没有面小于五元体,但至少有一个环3切割。原始图和偶对偶图都是简单的。对偶是一个4-连通的平面三次图,它的面不小于五边形,但至少有一个环4-割。原始和偶对偶图都是简单的,最小值至少为4的3-连通平面三角剖分。②原始图和对偶图都是简单的,ε-C4 4连通平面三角剖分(意味着最小度>4)。对偶是一个循环的4连通平面三次图。对偶是一个不带三角形的三连通平面三次图,但至少有一个环3次割。原始图和对偶图都是简单的。{ -C2 2-连通平面三角剖分最小度至少为3。可能有平行边(但记住它是三角剖分,所以它们之间必须有东西)。没有环路。对偶是一个2-连通的简单平面三次图。--C2X与-C2相同,除了必须至少有一对平行的边。在对偶中,至少有一个大小为2的割集。可以有平行边和环。The dual is a 1-connected simple planar cubic graph. -c1x Same as -c1 except that there must be at least one loop. In the dual, at least one cutset of one vertex. -c1t 1-connected planar triangulation with minimum degree at least 3. The dual is a 1-connected planar cubic graph, possibly with double edges but with no faces of size less than 3. -c1tx Same as -c1t except that there must be at least one loop. In the dual, at least one cutset of one vertex. We have c2 = c2x + c3, c1 = c1x + c2, and c1t = c1tx + c2. Also m4 = c4 + m4c3x, m5c4 = c5 + m5c4x, and m5 = c5 + m5c4x + m5c3x. MORE ON RES/MOD SPLITTING. The feature selected by the optional res/mod parameter to plantri is one of its greatest strengths. 对象集合被划分为MOD不相交的类,并且仅生成RES TH类。0×<= Res=MOD-1是必要的。这种分裂是为了使每台500 MHz的机器每运行5秒而设计的。此外,对于有很多对象的问题,mod的值至少可以大到10000,并且仍然具有合理的类大小的一致性。*类的定义服从模算术的正律。例如,类1/5是1/10和6/10的并集(因为数字等于1模5是等于1或6模10的数)。如果需要的话,可以使类进一步分裂成更小的片段。为了确定实际的分裂成本,以及可用的最大类数,运行程序PrimTrIIs(已知到MaFIX文件)。例如:%% PrsiTrIOS- -B 30×219258分裂情况在21级;CPU=2.97秒。这表示分裂成219258种情况是可行的(尽管如果使用了那么多分裂,分裂不会很均匀),每次分裂的代价大约为3秒。(在这种情况下,这意味着使用400个类只会导致百分之一的分裂惩罚。)插件可以通过在插件的扩展中定义SPLIITET来改变分裂级别。附录A定义平面代码。图的顶点从1开始编号。平面代码由一系列字节表示图,其无符号数值(0…255)是显著的。第一个字节给出顶点n的数目,然后是n个节,其中V段包含顺时针顺序的顶点V的邻接,接着是零字节。例如,图1的图形是由以下的字节值表示的:5×3、4、0、3、5、0、1、4、5、2、5、2、α、α、*,在有平行边的情况下,可能有一个以上的图形,其平面码与相邻列表的旋转相同。 To resolve this ambiguity, plantri makes the following convention: for each vertex v except for the first vertex, if the least numbered vertex that has v as a neighbour is w, then the first w in the section for v represents the same edge as the first v in the section for w. In case of all the graph classes generated by plantri that have no multiple loops, and also for all classes of triangulations, it can be proved that for every v > 1 we have w < v and the embedded graph is uniquely reconstructible from the code. In addition to the encodings of graphs, a PLANAR CODE file by default begins with the 15 characters >>planar_code<< without end-of-line characters. APPENDIX B. Definition of EDGE CODE. EDGE CODE is an alternative to PLANAR CODE that has the advantage of being uniquely decodable for all plane graphs (even with multiple loops). The undirected edges are numbered 0,1,... 连续地,但没有特定的顺序,并且每个顶点以顺时针顺序给出事件边缘数的列表。注意,在这样的列表中出现一个循环两次,并且通常每个边数都出现完全两次。报头有两种形式:1。一个字节的值1-255。在这种情况下,字节的值是字节的主体大小。用L=1字节来编码所有体中的边数。2。字节0,字节(k<4)+L(其中1<k=k,L<15),以及存储在k字节中的双二进制无符号数s。在这种情况下,S是以字节为单位的体大小,L是用于身体中的边号的字节数。标头的大小是1 + 1 +K字节。在每一节中,以每一个L字节BigEndiad整数为单位,以顺时针顺序给出入射边的边数。除最后一个以外的每个顶点部分后面是一个值为255的单字节。(注意,这意味着L足够大,最大的边数最多有254个字节。)第二个报头类型的唯一可能性是k=2,L=1。除图的编码外,默认的边码文件从13个字符开始。图形6和SPARSE6是文本格式,包含它们的文件是一个文本文件。除了标题,每行有一个对象。除了字头和行尾字符外,所有字节都有一个值在范围63-126(这是所有可打印的ASCII字符)。例:右侧1000101100011100个(1)个垫,0个,长度为6个倍数。例如:100010110001110000×2(2),每组分成6个位。例如:100010 110001 110000 110000(3),将每一组加上63,将它们视为二元数。(n=0=n=62),将n(n)定义为单字节n+63。若n>63,则定义n(n)为四字节126 r(x),其中x是n个例子的双位18位二进制形式:n(30)=93 n(12345)=n((α))=α×6图形:所以,所需要的字节数是上限(k/6)。让r(x)表示x的表示为字节串。Write the upper triangle of the adjacency matrix of G as a bit vector x of length n(n-1)/2, using the ordering (0,1),(0,2),(1,2),(0,3),(1,3),(2,3),...,(n-1,n). Then the graph is represented as N(n) R(x). Example: Suppose n=5 and G has edges 0-2, 0-4, 1-3 and 3-4. x = 0 10 010 1001 Then N(n) = 68 and R(x) = R(010010 100100) = 81 99. So, the graph is 68 81 99. Note that GRAPH6 format cannot represent loops or parallel edges. SPARSE6 format: The encoded graph consists of: (1) The character ':'. (2)顶点的数目。(3)一个边的列表。(4)端部的环和多个边被支持,但不是定向的边。(i)顶点n的数目:表示为n(n),如图6的格式。*边的列表:* k是二进制中表示n-1所需要的比特数。其余的字节编码序列r(z),其中z=b[0 ] x [0 ] b[1 ] x[1 ] b[2 ] x[2 ]…(这是b[m] x[m] ... Each b[i] occupies 1 bit, and each x[i] occupies k bits. Padding at the end is chosen so that the decoding algorithm below does not imply any spurious edges. The vertices of the graph are 0..n-1. The edges encoded by this sequence are determined thus: v = 0 for i from 0 to m do if b[i] = 1 then v = v+1 endif; if x[i] > v then v = x[i] else output {x[i],v} endif endfor Example: :Fa@x^ ':' indicates sparse6 format. Subtract 63 from the other bytes and write them in binary, six bits each. 000111 100010 000001 111001 011111 The first byte is not 63, so it is n. n=7 n-1 needs 3 bits (k=3). 以1和k∶1、000、1、000、0、001、1、110、0、101、1、0的方式写出其它位,这是B/X序列,1,0,1 0,1,6 0,5,1,7,7,1,7的端部只是填充。剩余的对给出了0-1~1-5-6的边。附录D为Primtri写插件。这需要一些关于程序如何工作的知识,这里我们将给出一点。A插件的一个典型用途是在输出之前先对输出图进行过滤。这是一个好主意,如果你只需要图的子集,因为Primtri非常快,所以写出图表并把它们读入另一个程序大约只要生成它们。有全局变量nv和ne,其中包含顶点的数目和有向边的数目(这是边数的两倍)。在这种情况下,全局INTING变量MISSING顶点表示缺少的内容。如果没有遗漏,则不符点<0。例如,如果NV=7和MISSIONG顶点=2,则顶点实际上被编号为0、1、3、4、5、6、7。图被保持为有向边的集合(类型边)。这些边是指针所引用的结构。They have these fields, amongst others: int start; the vertex at the start of the edge int end; the vertex at the end of the edge EDGE *invers; the directed edge which is the reverse of this one EDGE *next; the next edge in clockwise order around vertex start EDGE *prev; the previous edge in clockwise order around vertex start To find the edges, there is an array firstedge[0..], type EDGE*. The value of firstedge[i] is a pointer to one of the edges starting at vertex v. For example, to "look at" all the neighbours of vertex v we can do: EDGE *e,*elast; e = elast = firstedge[v]; do { look at e->end; e = e->next; } while (e !另一个例子是人脸的跟踪。假设我们有一个边E和*,我们想“看”所有在E.S.Eelase= E右边的边上的边;{ {看E;;E=e->nv->Prv;},(e)!“E=E-E->英孚->下一个,如果你感兴趣的是E的左边,另一个有用的全局数组是度[0…],它包含顶点的γ度。Another way to "look at" all the neighbours of vertex v is this: for (count = degree[v], e = firstedge[v]; --count >= 0; e = e->next) { look at e->end } To write a plug-in, you need to define some things in a separate source file (let's call it plugin.c), and make the name of that source file available when compiling plantri.c. For example, on most Unix systems: cc -o plantri_plugin -O4 '-DPLUGIN="plugin.c"' plantri.c All the quotes of both types are required. This process causes the text of plugin.c to be read into the text of plantri.c, so everything defined in each file is available in both. The work of the plug-in is achieved by defining macros. 在这里,我们列出了可能定义的宏,以及它们的含义。如果你不想要这些函数,就不要定义宏。{过滤:这是一个程序的名称,它被称为每一个同构类型的图,它通常会被输出(除了在D的情况下,它是在取对偶之前的原始图)。调用序列是这样的:int过滤器(int nbtot,int nbopt,int dopFip)。程序必须返回int值。如果值0是返回的,则该图不被写入。参数的含义是:nbtot=自同构的总数nbopp=o- p自同构的正则标号的数目,如果有O-r-自同构,nbop= nbtot/2,而如果有方向反转自同构,则没有nbopp=0或nbop= ndott.dof DopLip=0,否则,只有1个πnbtot,nbopp,dop唇仅保证正确的if - G或-o是给定的。在这种情况下,完全自同构组是可用的;与作者联系的细节是:没有G和-O,DoFLIP=0,其他参数是未定义的。这些规则意味着DoFLIP + 1是要写入的图的数目(除了嵌入不敏感的格式Grac6和Spuls6,其中只有一个将被写入)。如果使用的是筛选器来计算具有特定属性的输出,则用DoFLIP + 1的权重来计算每一个图。这个过程可以用来以另一种格式写入图形。正常输出文件(一个打开的文本文件)是文件以外的,除非给出了if - u,在这种情况下,您将不得不打开一个文件自己或使用StdOUT。类型:空总结(空),其主要用途是写过滤器和其他插件组件收集的信息。如果你不想要正常的总结,则在返回之前将全局变量DOM设为0。在Prurtu.C中查看统计数据是如何被收集和写入的。所有的统计数据都应该写到文件MSGfile中。您可以使用它来执行诸如:(a)测试,如果交换机对于这个插件是有效的。(b)将开关值设置为适当的默认值。(c)初始化这个插件使用的数据结构。The mechanism for detecting switches, and their values, can be best seen by examining plantri.c. Here are two simple cases: (a) Add a boolean switch -z: #define PLUGIN_SWITCHES else if (arg[j] == 'z') zswitch = TRUE; (b) Add a switch -z that takes an integer value: #define PLUGIN_SWITCHES else if (arg[j] == 'z') \ zvalue = getswitchvalue(arg,&j); In each case you have to define and initialize the new variables. You can do that at the top level in plugin.c: (a) static int zswitch = FALSE; (b) static int zvalue = -1; Checking that zvalue is valid, or giving it a default value if it is not specified (i.e. is still -1), can be done using PLUGIN_INIT. If you change the switches, 您还应该重新定义在Primtri C的第一行中出现的宏开关。它只在错误消息中使用。* PrimyField*这些是最难使用的宏,因为需要相当多的程序内部知识。PrimTri通过在所需的类中以最小的图形开始操作,然后一次扩展几个顶点,直到达到输出大小。扩展图的精确方法取决于图类。PrimyField**的值是在生成过程中计算的每个中间图计算的表达式,它比输出大小小(或者在某种意义上构造得更少)。如果表达式的值为0,则中间图不展开(因此它的后代中没有一个出现在输出中)。If the value is not 0, expansion proceeds as normal. The actual macros available are PRE_FILTER_SIMPLE, PRE_FILTER_MIN4, PRE_FILTER_BIP, PRE_FILTER_POLY, PRE_FILTER_DOUBLE, PRE_FILTER_ORDLOOP, PRE_FILTER_SPECIALLOOP, PRE_FILTER_QUAD, PRE_FILTER_MIN5. A few more complex macros are available, but describing them would require too much detail about plantri internals. Some examples of plug-ins are distributed with plantri: mdcount.c (makes plantri_mdcount) - count graphs by minimum degree degseq.c (makes plantri_deg) - counts graphs by degree sequence nft.c (makes plantri_nft) - counts graphs by non-facial triangles maxdeg.c (makes plantri_md) - imposes a bound on the maximum degree allowed_deg.c (makes plantri_ad) - specify which degrees are permitted faceorbits.c (makes plantri_fo) - count plane imbeddings with distinguished outer face APPENDIX E. Graph Counts. In this我们列出了可以使用Primtri生成的图形类的一些计数。如果你在这些类中计算任何额外的数字,please send them to us for inclusion. The column headings in these tables are: nv = number of vertices (or faces in the dual) ne = number of edges (same in the dual) nf = number of faces (or vertices in the dual) all = count of isomorphism classes O-P = count of orientation-preserving isomorphism classes. ---------------------------------------------------------------- 3-connected planar triangulations (plantri). nv ne nf all O-P 4 6 4 | 1 1 5 9 6 | 1 1 6 12 8 | 2 2 7 15 10 | 5 6 8 18 12 | 14 17 9 21 14 | 50 73 10 24 16 | 233 389 11 27 18 | 1249 2274 12 30 20 | 7595 14502 13 33 22 | 49566 97033 14 36 24 | 339722 672781 15 39 26 | 2406841 4792530 16 42 28 | 17490241 34911786 17 45 30 | 129664753 259106122 18 48 32 | 977526957 1954315346 19 51 34 | 7475907149 14949368524 20 54 36 | 57896349553 115784496932 21 57 38 | 453382272049 906736988527 22 60 40 | 3585853662949 7171613842488 23 63 42 | 28615703421545 57231089062625 ---------------------------------------------------------------- 3-connected planar triangulations with minimum degree at least 4, (plantri -m4), and 4-connected planar triangulations (plantri -c4). m4 c4 nv ne nf all O-P all O-P 6 12 8 | 1 1 | 1 1 7 15 10 | 1 1 | 1 1 8 18 12 | 2 2 | 2 2 9 21 14 | 5 5 | 第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二、第二个方面,第二个方面都是4 4×10 10 24 16 12 14 14 10 12 11 11 27 1863,42,12941995397,25878895923,4332047595,8661936137,24,66,44,76890024027,153765144588,153765144588,153765144588,24724362117,π,α,α,α,α,π,π,π之间的关系。这是由于一个文书错误而不是程序错误。{----------------------------------------平面三角剖分没有3个连通性的要求:2-最小连通度至少为3(Primtri -C2)1最小连通度至少为3,并且没有两个面共享多于一个边(Primtri -C1)1最小连通度至少为3(Primtri -C1T)。〔1〕{1,α,α,α,π,α,π,π,π,π,π,α,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,π,不是精确的值。(2)所有的O-P(4)1,1,5,1,1,6,3,3,7,8 8。9,10,8,37,42,42,α,α,α,β,ε,α,β,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,ε,3 3×3 3 3 3 7 9 107406965136219 14808015829668 | 8025676381104 16042357404748 ---------------------------------------------------------------- 3-connected planar Eulerian triangulations (plantri -b), and 4-connected planar Eulerian triangulations (plantri -bc4). b bc4 nv ne nf all O-P all O-P 6 12 8 | 1 1 | 1 1 7 15 10 | 0 0 | 0 0 8 18 12 | 1 1 | 1 1 9 21 14 | 1 1 | 0 0 10 24 16 | 2 2 | 2 2 11 27 18 | 2 2 | 1 1 12 30 20 | 8 9 | 5 6 13 33 22 | 8 11 | 3 3 14 36 24 | 32 41 |α,α,ε,α,β,α,β,α,β,β,α,β,α,β,α,β,β,α,β,α,β,α,β,β,α,β,β,α,β,α,β,β,α,β,β,α,β,α,β,β,α,β,β,α,β,α,β,α,β,β,α,β,α,β,α,β,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,α,β,π,β,α,β,α,β,π,β,α,β,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,α,β,β,α,β,β,α,β,β,α,β,β,α,β,β,α,β,β,π,β18 22×15 15 39 26 57 89 89 19 25 16 16 42 28 47522279 94737950 29 81 54 | 1126716000 2252541666 | 161222224 321889797 30 84 56 | 4060375677 8118442511 | 553033544 1104620101 31 87 58 | 14697571234 29390845869 | 1899744032 3796766424 32 90 60 | 53432834170 106854715443 | 6571595339 13136256710 33 93 62 | 195015189626 390009407529 | 22793047258 45572625554 34 96 64 | 714404259151 1428755867040 | 79449718217 158865787212 35 99 66 | 2626130395699 5252157292165 | 277760027418 555452882736 36 102 68 | 9685071313079 | 974836112457 ---------------------------------------------------------------- Convex polytopes (3-connected planar simple graphs, plantri -p), and convex polytopes with minimum degree at least 4 (plantri -pm4). p pm4 nv all O-P all O-P 4 1 1 | 5 2 2 | 6 7,8,1,1,7,34,45,1,1,8,257,257,419,419,π,α,α,α,π,π,ε,β,257,257,257,257,419,419,419,419,419,419,π,π,α,α,α,α,π,π,257,257,257,419,419,419,419,419,419,419,π,π,π,π,ε,β,257,8,257,257,419,419,419,π,π,π,π,π,π,π,π,257,π,257,419,419,419,419,419,419,419,π,π,π,π,π,π,π,257,π,257,257,419,419,419,419,419,419,419,419,419,419,419,419,π,π,π,π,μ,257,8,257,419,419,419,π,π,π,π,π,π,π,257,π,257,π,π,μ,257,257,419,419,419,419,419,π,π,π,π,π,π,257,257,419,257,419,419,419,419,419,419,419,419,419,419,419,419,419,419,419,π,π,π,π,μ,257,257,419, | 4086847012014 8173585336482 ---------------------------------------------------------------- Triangulations of a disk: 3-connected (plantri -P), or exactly 2-connected but without vertices of degree 2 (plantri -Pc2x), or exactly 2-connected with vertices of degree 2 on the outer face permitted (plantri -Pc2m2). P nv all O-P 4 1 1 5 2 2 6 7 8 7 27 37 8 132 213 9 773 1386 10 5017 9524 11 34861 68057 12 253676 501858 13 1903584 3788747 14 14616442 29170667 15 114254053 228295618 16 906266345 1811802818 17 7277665889 14552804492 18 59066524810 118124257451 19 483864411124 967698049455 20、3996427278475、7992746427963、21、33250623548406、66500865364037、π、PC2x、PC2xM2、nv、全部O-P均O-P 3、1、1、4、1、1、4、4、1、4、4、1、4、1之间的关系。42666989,15,26887369,53713758,165164873,330125084,16,212338376,424461698,1296637273,2592566706,2592566706,2592566706,17,1296637273,2592566706,π,π,β,ε,λ,λ,α,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,α,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,α,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ,λ(12)30,20,1,1,1,1,13,33,22,0,0,0,0,π,α,β,ε,ε,22,0,22,0,0,0,0,0,π,α,α,α,π,π,ε,22,0,0,0,0,0,0,π,π,α,β,π,ε,33,22,22,0,0,0,0,π,π,α,β,π,π,ε,22,0,0,0,0,0,0,0,π,π,π,π,π,π,ε,22,0,0,0,0,0,0,π,π,π,π,π,ε,π,ε,π,μ,33,22,0三角三角多边形多面体NV-NE-NF全O-P全O-P关于Suffer-Suffix[2]的关系2070 3899×36291 36291 71207 71207 24 66 44 7290 7290 14052 180444 35730885511947468、37、105、70、160012226334、320013030067、38、108、72、599822851579、1199620598580、599822851579、1199620598580、1199620598580、1199620598580、39等一个前一个版本的NV=α值不正确,原因不明。It does seem that the program always got the right answer. ---------------------------------------------------------------- 3-connected planar quadrangulations (plantri -q). quadrangulations nv ne nf all O-P 8 12 6 | 1 1 9 14 7 | 0 0 10 16 8 | 1 1 11 18 9 | 1 1 12 20 10 | 3 4 13 22 11 | 3 3 14 24 12 | 11 15 15 26 13 | 18 25 16 28 14 | 58 92 17 30 15 | 139 234 18 32 16 | 451 803 19 34 17 | 1326 2469 20 36 18 | 4461 8512 21 38 19 | 14554 28290 22 40 20 | 49957 98148 23 42 21 | 171159 338673 24 44 22 | 598102,1188338,25,46,23,2098675,4180854,26,48,24,7437910,7437910,14840031,14840031,π,α,α,α,π,π,ε,ε,24,7437910,7437910,14840031,14840031,14840031,14840031,14840031,π,α,β,π,ε,π,ε,ε,24,7437910,14840031,14840031,14840031,14840031,14840031,14840031,14840031,π,β,π,β,π,α,π,π,ε,24,7437910,24,7437910,7437910,14840031,14840031,14840031,π,α,β,π,π,π,π,ε,π,ε,ε,24,7437910,7437910,14840031,14840031,14840031,14840031,π,π,π,π,π,π,π,π,π,π,π,π,π,ε,π,ε,24,7437910,7437910,14840031,14840031,14840031,14840031,π,π,π,π,π,π,π,π,π,π,π,π,π,π,ε,24,7437910,7437910,14840031,14840031,14840031,14840031,14840031,π,π,π,π,π,π,π,π,π,π,π,π,π,ε,π,π,μ,48,24,24,7437910,14840031,14840031,14840031,14840031,14840031,π,π,π,π,π,π,π,π,π,π,感谢Hugo Pfoertner的注意。)《附录F.版本历史》原版本的PrimTIII在1996年6月发布,该版本仅执行了当前版本的一些功能。这里,我们将列出最近版本的功能所做的更改。内部变化被列在Primtri C.x版本3:2000年4月25日发布。第3.1版:2000年7月3日发布。Thom Sulanke发现,简单三角剖分的代码在26个或更多个顶点上停止工作。这个bug不影响附录E中列出的任何计算大小。我们相信,用分布式软件遇到bug的唯一可能方法是使用Max DEG或26个或多个顶点的允许的DEG程序。正确的操作与-M4,-C4,-B和MI5插件没有受到影响。*版本3.1纠正错误,而不改变程序的行为。非常感谢Thom的帮助。第4版:2001年4月20日发布。The plug-in min5.c is no longer required. sparse6 output now represents loops only once. Version 4.1: Released on November 30, 2001. Added -qc2, -qc4, -qm2c2 for types of quadrangulation. Version 4.3: Released on August 5, 2007. Added -V : write only those with non-trivial groups Added -E : write output in edge code Added -bp : general bipartite graphs -p can now make graphs of 2 or 3 vertices Version 4.4: Released on May 2, 2009. Fixed -pc1x and -pc2x Fixed incorrect connectivity computation in -p and -pb, only known problems were with -c1x, -c2x and statistics reported by -v Version 4.5: Released on September 5, 2011. Also apply FAST_FILTER_* to starting graphs (all uses need checking against the code as more than one filter might need defining)