plantri使用指南(4.5版)====================================冈纳·布林克曼比利时根特大学Gunnar.Brinkmann@ugent.be公司布伦丹·麦凯澳大利亚国立大学bdm@cs.anu.edu.au简介。plantri是一个生成特定类型图形的程序嵌入在球体上。输出每个同构类的一个成员,使用数量几乎与生成的图形数量无关。这个,再加上异常快速的操作和仔细的验证,使程序适合处理大量图形。同构是相对于嵌入物定义的,因此在一些cases输出可能与抽象图同构。定义。当在球体上绘制图形而没有边相交时,球体是从而划分为称为FACES的区域。如果图形是连接的,则每个面与磁盘同胚(在本例中,这意味着它具有没有孔)。我们可以在面中间的球体上切一个洞,然后把球体打开成一个平面,但我们必须记住外部区域与其他区域一样多的面,即使它不再是磁盘。描述了在球面上绘制的图形的组合结构通过每个顶点处的边的循环顺序,其中(根据我们将采用任意选择)如果我们看,顺序是顺时针的从外面的球体。3------------4/ \ /|/\b抄送|d/\/|e图1。/ \ / |/ \ / |0 --------- 2 ---- 1f克在上面的例子中,抽象图是由边给出的a={3,4},b={2,3},c={2,4}、d={0,3}、e={1,4}和f={0,1,2},g={1,2}。嵌入通过按顺时针顺序列出边缘来给出每个顶点:0:d,f1:e,g2:b,c,g,f3:a,b,d4: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------------3|\ / \|\c b/\图2。| \ / \| \ / \1---- 2 ---------- 0克/平方英尺在定义两个嵌入图的“同构”时,我们可以选择是否自动将图形及其镜像视为同构的。plantri知道这两个定义:设G和H是两个具有相同数目的连通嵌入图顶点和相同数量的边。从G到H的方向保留(O-P)同构是一个双射fv从V(G)到V(H),以及从E(G)至E(H)的双射fe,这样(1) 如果e={v1,v2}在e(G)中,则fe(e)={fv(v1),fv(v2)}和fe(e在E(H)中。(2) 如果(e1,e2,…,ek)是与G的顶点v相关的边集,按顺时针顺序,然后是(fe(e1),fe(e2),。。。,f(ek))是沿顺时针方向与G的顶点fv(v)相交的边。从G到H的方向反转(O-R)同构是一个双射fv从V(G)到V(H),以及从E(G)到E(H)的双射fe,使得(1) 如果e={v1,v2}在e(G)中,则fe(e)={fv(v1),fv(v2)}和fe(e在E(H)中。(2) 如果(e1,e2,…,ek)是与G的顶点v相关的边集,按顺时针顺序,然后是(fe(e1),fe(e2),。。。,f(ek))是以逆时针顺序与G的顶点fv(v)相交的边。请注意,这两个定义仅在倒数第二个单词上有所不同。从G到H的同构是O-P同构或O-R同构同构。同构和O-P同构(但不是O-R同构)是等价关系,所以我们可以说同构类和O-P同构分类。类似地,所有同构和集合所有O-P同构(但不是所有O-R同构的集合)从嵌入图到其自身在组合下形成组:自动机组和O-P自动机组。给定一个嵌入图G,我们可以形成另一个称为its的嵌入图平面对偶(或只是对偶)D。D的顶点是G的面。D的边与G的边是1-1对应的:D中边的两个端点是位于G中对应的边。最后D中的顶点(G中的面)是G中的面边界的相应边。图2中的图形具有以下对偶:----------------------|d日|| ---------- ||/a个|||/C————————D|/c/b号||/e/|图3。A---------B||\克||| ---------- ||(f)|----------------------顶点A对应于图2的外表面。请注意对偶的面对应于原始图的顶点。事实上,不难看出,一个嵌入的对偶的对偶图形是原始图形。还要注意的是原始图中的2度导致对偶图中的平行边。如果嵌入图的所有面都是三角形(即以3为界边)嵌入的图形称为三角形。文学对于外表面是否必须是三角形有分歧,但我们会假设所有的脸都是三角形。三角剖分的对偶是嵌入的立方(三价)图。具有n个顶点的三角剖分具有精确到3n-6个边和2n-4个面。如果无法通过以下方式断开连接,则图(嵌入或未嵌入)为k-CONNECTED删除k个或更少的顶点。修改定义很方便对于完整的图K4,它是3连通的,但不是4连通的。一个标准定理说三角剖分是3连通的当且仅当如果它没有环或平行边。平面是不可能的对于大于5的k,图是k-连通的。如果不可能,则图(嵌入或未嵌入)是循环K-连通的删除k个或更少的顶点,使图形分解为其中至少有两个具有循环。如前所述,K4被定义为循环3-连通,但不是循环4-连通。平面图可以有任意高循环连通性。在许多情况下嵌入图及其对偶的循环连通性。例如,三角剖分是k连通的当且仅当其对偶是循环的k连接。简单图是没有平行边或循环的图。安装plantri。最新版本的plantri可从以下网址获得http://cs.anu.edu.au/~bdm/plantri公司plantri.c是一个c程序,它是作为单个文件plantri.c.编写的。它应该用大多数现代C编译器立即编译,因为它只包含非常标准的代码。(我们唯一没有测试的是使用16位算术。如果可以,请确保类型“int”位于至少32位。)要在Unix下编译plantri.c,可以使用cc-o plantri-O4 plantri.c文件其中“4”是编译器接受的最大数字,或者只是生成plantri(但首先检查makefile)。跑步植物。要运行plantri,您需要能够输入命令行参数。我们的所有示例都将使用标准Unix语法。plantri跑步的一个例子是:plantri-d 16这使得3的对偶(因为-d存在)是连通的16个顶点的三角剖分。换句话说,它使具有28个顶点的3连通三次平面图。唯一必需的参数是顶点数(示例)。也可以用“28d”表示(后缀“d”表示“dual”)在这种情况下,它通过添加4然后除以2进行转换:(28+4)/2 = 16. 在三角剖分的情况下,此计算得出面的数量,即对偶立方体中的顶点数量图表。除了一个强制参数外,还有三种可选参数参数:*开关由“-”字符引入。如果有多个它们可以任意连接或分离。它们也可以出现任何地方。例如,这些命令行都是等效的:plantri-m4u 10植物-u-m4 10植物10-um4植物-u 10-m4开关的含义将在下一节中解释。如果开关采用数值,例如-m,则给出它没有值与给定值0相同。也就是说,-m是与-m0相同。*如果您希望将图形发送到某处,则可以给定OUTPUT FILE非标准输出。图形以外的信息(例如统计信息)写入标准错误流。这是允许的使用单独的“-”显式请求将图形输出到标准输出。例子:plantri 20 tri.20--将20个顶点三角剖分发送到文件tri.20*可以提供RES/MOD对,以仅选择以下图形的一部分否则会产生。这对包含两个整数“/”介于之间,例如13/100。第一个整数可以是从0到1小于第二个数字。本例从中选择第13部分第0、1、…、。。。,99.总的来说,这100份是将所有图形划分为100个大致相等的部分。这是提供的目的是使您能够将计算任务划分为可管理的大小。稍后将提供有关RES/MOD对的更多信息。参数和开关可以按任何顺序显示,但有一个例外:强制参数(顶点数)必须位于任何输出文件或res/mod参数。输出格式。plantri可以用各种不同的格式编写图形。平面代码是默认格式。如果您计划,这是首选格式将图形输入到需要嵌入的程序中如果你不需要嵌入,那么很方便。然而,它使用字符不可打印,因此不适合肉眼查看。ASCII码是平面码的一种人类可读版本。的顶点图形由以“a”开头的ASCII字符命名。例子: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。EDGE CODE是平面代码的替代方案,可支持所有平面图即使存在多个循环,也要明确编码。要选择边缘代码,请使用-E。GRAPH6是图的抽象结构的紧凑代码。没有表示嵌入,因此这不是一个合适的代码如果你想嵌入,就用它。它也仅限于简单图。graph6是Brendan McKay支持的格式之一“nauty”包。每个图形占用一行。要选择graph6代码,请使用-g。SPARSE6是一个用于图的抽象结构的紧凑代码针对稀疏图进行了优化。如果你不想嵌入处理20个或更多顶点的三次图时,spare6是一个好方法选择。sparse6是Brendan McKay支持的格式之一“nauty”包。每个图形占用一行。要选择稀疏6代码,请使用-s。除ascii代码外,所有这些格式都有一个标准头,可以在开始时写入输出:默认情况下写入的格式头?平面代码>>平面代码<<是边缘代码>>边缘代码<<是图6>>图6<<否稀疏6>>稀疏6<<否在每种情况下,标题后面都没有行尾字符它(出于可移植性的原因)。在默认值为to,or vice-versa,使用-h。如果你只想数图而不想写图,可以使用-u选择无输出。附录A-C中给出了这些格式的详细信息。其他开关。-d导致写入对偶图而不是原始图。请注意,它仅应用于输出阶段。所有其他交换机在进行对偶之前,请参考原始图形。例如,-m4(最小度至少为4)表示原始图形而不是双重身份。-o通常,每个同构类都会写入一个成员。如果这样给定开关后,将写入每个O-P同构类的一个成员。由于graph6和spare6格式无论如何都不会对嵌入进行编码,如果使用-g或-s,出于输出目的,此开关将被忽略。-o还表示-G。-G只有在使用插件时,才会对该开关感兴趣(请参见附录D)。它确保完全自同构群是为每个输出图计算。如果您不使用插件,-G只会放慢速度。-V仅输出具有非平凡组的图形。如果给定-o,则使用O-P组。否则,整个组。暗示-G。-v plantri将始终(通过向标准错误发送消息)告诉您生成的图形数。如果指定-v,它可能告诉你一些额外的统计信息。例如,如果您使用-o,-v将使其同时通知您同构类以及同构类的数量与镜像同构的O-P。选择图形类。在这些说明中,单词“primal”是指您将得到的图形如果不使用-d,则“dual”指的是该图的对偶而是使用-d)。字符#表示非负整数。我们从在多种情况下可用的几个交换机开始。-m#指定最小度的下限。在对偶图中表示最小面部尺寸的下限。默认值为-m3。-c#指定连接的下限。双重含义在每种情况下都将解释该图。默认值为-c3。(-c4与-q的含义略弱,见下文。)-x与-c#结合使用时,连接必须正好为#,而不是至少#。(以下是一些例外情况。)现在我们可以解释plantri可以生成的图形类。-b但不是-p选择欧拉三角剖分,其中“欧拉”表示每顶点具有偶数阶-除默认值外,m不可用-m4(无论如何,最小度数总是4)。-c3(默认)3连通欧拉平面三角剖分。对偶是一个3连通的二部三次图。-c4四连通欧拉平面三角剖分。对偶是一个循环4连通的二部三次图。-c3x-c3和-c4之间的差异,即那些3连通的具有三角形的欧拉平面三角剖分不是一张脸。-p但不是-b选择一般平面简单图。在3连接的情况下,这些也称为凸多面体。请注意,定义了同构参考球体上的嵌入,这意味着输出如果连通性较小,则可能与抽象图同构比3。-m1最小度数至少为1。-m2最小度数至少为2。-m3(默认)最小度数至少为3。-m4最小度数至少为4。-m5最小度数至少为5(因此正好为5)。-c3(默认)连接至少为3。-c2连接至少为2。-c1连通性至少为1。-c2x-c2和-c3之间的差异,即连接正好是2。-c1x-c1和-c2之间的差异,即连接正好为1。如果使用了-c开关而没有使用-m开关,则最小度数为设置为相同的值。例如,-c2与-c2m2相同。如果使用-m开关而不是-c开关,则3连接性为假设。这意味着,如果不使用,-m1和-m2是无效的-c1或-c2。此外,可以施加两个限制:-e指定边数的边界(等于对偶中的边数)。默认值为无边界。对于n个顶点,边的数量可以是从天花板开始的(3n/2)(2n表示-m4,ceil(5n/2)表示-m5)至3n-6。有四种可能的形式:-e#精确的边数#-e: #最多边数#-e#:至少边数#-e#:#从#到#的边数#只有下限才能有效实现。一般情况下说起来,进行一系列边缘计数更有效而不是一次只计算一个边。-f#指定面大小的上限(在dual:an中最大度的上限)。默认值为无边界。对于n个顶点,最大面大小可以是从3到n-1。-bp或-pb选择一般平面简单二部图。这些是一个子集仅由-p生成的类,即二部类。最小阶数始终最多为3,因此所有参数除了-m4、-m5和-f3之外,可以使用-p。对偶是平面欧拉图的一个子类。对于-c3,对偶是3-连通平面欧拉图。-P#选择磁盘的三角剖分。这些是嵌入的简单图形有着独特的“外表”。外表面可以是任何尺寸(这里称为磁盘大小),但其他面必须是三角形。-P的参数是磁盘大小。如果未给定参数(或0),允许所有磁盘大小。如果需要所有磁盘大小,则它是一次完成所有任务比一次完成一个任务效率更高。除外表面外,所有顶点的阶数必须至少为3。在外表面上,根据到-m参数。此外,可能存在的唯一2个切割是外表面的弦:允许用于-c2,但不允许用于-c3。由于外表面上2度的顶点意味着弦组合-m2c3与-m3c3相同。列出了-c、-m和-x的有用组合:-c3m3(默认)无弦,无顶点阶数2-允许c2和弦,没有顶点2度-需要c2x和弦,无顶点2度-允许c2m2和弦,允许2度-要求c2xm2和弦,允许2度我们有c2P=c3m3P+c2xP和c2m2P=c 3m3P+c2xm2P。输出图的标记方式是v-w是从v-w看,边缘和外表面位于左侧,其中v是第一个顶点,w是第二个顶点。对于双输出,第一个顶点对应于外部面对。对偶图是一个每个顶点都是3度,可能第一个顶点除外。解释输出时,请记住外表面并在确定同构。这意味着,例如,一些输出大小为3的外表面将与抽象图同构,即使在3连通的情况。-q选择简单四边形。这些是简单的平面图每个面的长度为4。对偶图是平面四次图图。-x未实现。下面列出了-c和-m的有用组合:-c3m3(默认)3连接对偶:3连通简单四次图-c2m2任意双:4边连接(可能不简单)四次多重图-c2最低3度对偶:4边连通简单四次图-c4 3连接,无非面部4循环双:3连接,6周期y边缘连接(简单)四次图如果缺少-b、-q、-p和-p,则发现的图是三角剖分仅受连接性和最小程度的限制。在这种情况下,存在低于3的连接性的可能性。-c、-m、-x和-t的有用组合为:-c3m3(默认)3连通平面三角剖分。对偶是一个3连通的平面三次图。原始图和对偶图都很简单。-m5-最小度数为5的3-连通平面三角测量。对偶是一个没有面的3连通平面三次图比五边形小。原始图和对偶图都很简单。-c5五连通平面三角剖分(表示最小度为5)。对偶图是一个循环5连通的平面三次图。原始图和对偶图都很简单。-最小度为5的m5c4四连通平面三角剖分。这个对偶是一个具有循环4连通的平面三次图没有比五边形更小的脸。原始图和对偶图都很简单。-最小度为5的m5c3x三连通平面三角剖分和至少一个非面部三角形。双重保险是一种没有小于的面的3-连通平面三次图五边形,但至少有一个循环3切割。原始和对偶图很简单。-最小度为5的m5c4x三连通平面三角剖分以及至少一个分离的4循环。双重保险是一种无面小于的4连通平面三次图五边形,但至少有一个循环4切割。原始和对偶图很简单。-最小度至少为4的m4三连通平面三角剖分。对偶是一个没有三角形的3连通平面三次图。原始图和对偶图都很简单。-c4 4连通平面三角剖分(表示最小度>=4)。对偶是一个循环4连通的平面三次图。原始图和对偶图都很简单。-最小度为至少4个和至少一个非面部三角形。双重保险是一种没有三角形但至少有三角形的3连通平面三次图一个循环3次切割。原始图和对偶图都很简单。-c2 2-连通平面三角测量,最小度数至少为3。可能有平行边(但记住这是三角剖分所以它们之间一定有东西)。没有循环。对偶图是一个2连通的简单平面三次图。-c2x与-c2相同,只是必须至少有一对平行边。在双人间中,至少有一个尺寸为2的剖面图。-最小度至少为3的c1-连通平面三角剖分没有两个面共享一条以上的边。两者都可以平行的边和环。双通道是一个单连接的简单平面三次图。-c1x与-c1相同,只是必须至少有一个循环。在对偶中,一个顶点的至少一个割集。-c1t最小度至少为3的1-连通平面三角剖分。对偶是一个1-连通的平面三次图,可能有双面,但没有小于3的面。-c1tx与-c1t相同,只是必须至少有一个循环。在对偶中,一个顶点的至少一个割集。我们有c2=c2x+c3、c1=c1x+c2和c1t=c1tx+c2。此外,m4=c4+m4c3x、m5c4=c5+m5c4x和m5=c5+m5c4-m5c3x。关于RES/MOD分割的更多信息。plantri的可选res/mod参数选择的功能是一个它最大的优势。对象集被划分为mod不相交类,并且只生成res-th类。有必要0≤res≤mod-1。拆分的设计使开销为500MHz机器每次最多运行5秒。此外,对于以下问题总共有很多对象,mod的值至少可以是高达10000人,班级规模仍有合理的统一性。类的定义遵循模运算的一般规律。例如,类1/5是1/10和6/10的联合(因为数字等于1模5的数字等于1或6模10)。这个如果需要,可以将类进一步拆分为更小的部分。确定拆分的实际成本,以及类可用时,运行程序plantris(makefile已知)。例如:%工厂s-b 30219258例21级分裂病例;cpu=2.97秒这表明将病例分为219258例是可行的(尽管如果你用那么多的话,分割不会很均匀)每次跑步的间隔时间约为3秒。(在这种情况下,这意味着使用400个类只会导致1%的分裂惩罚。)插件可以通过在PLUGIN_INIT的扩展。附录A.平面代码的定义。PLANAR CODE是plantri的默认输出格式图形从1开始编号。平面代码表示图形一系列字节,其无符号数值(0..255)为重要。第一个字节给出了顶点数n,然后是是n个截面,其中截面v包含顶点v的邻居顺时针顺序后接零字节。没有直线终点附加字符。例如,图1的图形由以下内容表示字节值:5 3 4 0 3 5 0 1 4 5 2 0 1 5 3 0 2 3 4 0如果有平行边,则可能有多个图形其平面代码在相邻列表的旋转之前是相同的。为了解决这种模糊性,plantri制定了以下约定:对于除第一个顶点外的每个顶点v,如果编号最少以v作为邻居的顶点是w,然后是截面中的第一个w对于w,v表示与截面中第一个v相同的边。如果plantri生成的所有图形类都没有多个循环,并且对于所有类型的三角剖分,它可以是证明了对于每一个v>1,我们都有w<v并且嵌入图是可从代码中唯一重建。除了图形编码之外,默认情况下还使用PLANAR CODE文件以15个字符开始>>平面代码<<不带行尾字符。附录B.EDGE代码的定义。EDGE CODE是平面码的替代方案,具有以下优点对所有平面图(即使有多个循环)都是唯一可解码的。无向边编号为0,1,。。。连续但在没有特定的顺序,每个顶点都有一个事件列表给出了顺时针顺序的边数。请注意,出现了一个循环在这样的列表中出现两次,通常每个边号都会出现总共两次。代码由标题和正文组成。收割台具有以下之一两种形式:1.值为1-255的单个字节。在这种情况下字节是主体的大小(以字节为单位)。中的所有边缘编号正文将使用L=1字节进行编码。2.字节0、字节(K<<4)+L(其中1<=K,L<=15)和二元数以K字节存储的无符号数字S。在这种情况下,S是尺寸主体的字节数,L是用于边缘的字节数身体中的数字。标头的大小为1+1+K字节。实体的每个顶点都有一个截面。在每个部分中,边缘入射边的数字按顺时针顺序给出,使用每个字节的L字节双字节整数。每个顶点部分,除了最后一个后面是值为255的单个字节。(请注意意味着L足够大,以至于最大边数第一个字节值最多254。)在plantri中,第二个标题类型的唯一可能性是K=2,L=1。除了图形编码之外,默认情况下还有EDGE CODE文件以13个字符开头>>edge_code<<没有行尾字符。附录C图6和备件6的定义。本说明书中的所有数字均为十进制,除非明显为二元的。GRAPH6和SPARSE6是文本格式它们是一个文本文件。除了标题之外,每行还有一个对象。除了标头和行尾字符,所有字节在范围63-126(都是可打印的ASCII字符)。位向量:长度为k的位向量x可以表示如下。示例:1000101100011100(1) 用0填充右侧,使长度为6的倍数。示例:100010110001110000(2) 分成每组6位的组。示例:100010 110001 110000(3) 将63加到每组中,将它们视为二进制数。示例:97 112 111然后,这些值被存储为每个字节一个。因此,所需的字节数是上限(k/6)。让R(x)将x表示为一个字节串。小非负整数:设n是0-262143(262143=2^18-1)范围内的整数。如果0<=n<=62,则将n(n)定义为单字节n+63。如果n>=63,则将n(n)定义为四个字节126 R(x),其中x是n的双端18位二进制形式。示例:N(30)=93N(12345)=N(000011 000000111001)=126 69 63 120GRAPH6格式:假设G有n个顶点。写出相邻的上三角G矩阵作为长度为n(n-1)/2的位向量x,使用排序(0,1),(0,2),(1,2),(0,3),(1,3),(2,3),...,(n-1,n)。然后将该图表示为N(N)R(x)。示例:假设n=5,G具有边0-2、0-4、1-3和3-4。x=0 10 010 1001则N(N)=68,R(x)=R(010010 100100)=81 99。图是68 81 99。请注意,GRAPH6格式不能表示循环或平行边。SPARSE6格式:编码图由以下部分组成:(1) 字符“:”。(这是为了区分GRAPH6格式的代码。)(2) 顶点数。(3) 边的列表。(4) 直线终点支持循环和多条边,但不支持定向边。顶点数n:表示为GRAPH6格式中的n(n)。边缘列表:设k是用二进制表示n-1所需的位数。其余字节编码序列R(z),其中z=b[0]x[0]b[1]x[1]b[2]x[2]。。。b[m]x[m]。。。每个b[i]占用1位,每个x[i]占据k位。选择末尾的填充,以便下面的解码算法不表示任何虚假边缘。图的顶点为0..n-1。由此确定由该序列编码的边:v=0对于i从0到m do如果b[i]=1,则v=v+1 endif;如果x[i]>v,则v=x[i]否则输出{x[i',v}结束外循环示例:传真@x^“:”表示spare6格式。从其他字节中减去63,并将其写入二进制,每个字节六位。000111 100010 000001 111001 011111第一个字节不是63,所以是n=7n-1需要3位(k=3)。以1和k为一组写入其他位:1 000 1 000 0 001 1 110 0 101 1 111这是b/x序列1,0 1,0 0,1 1,6 0,5 1,7。末尾的1,7只是填充。剩下的几对给出了边0-1、1-2、5-6。附录D.为plantri编写插件。plantri具有对其进行编译时更改的功能行为。这需要一定程度的程序知识有效,在这里我们将给出一点。的典型用法插件用于在写入输出图之前对其进行过滤。如果您只需要一些图形子集,这是一个好主意,因为plantri速度如此之快,以至于可以写出图表并阅读进入另一个程序所需的时间与生成它们的时间差不多。plantri中的顶点从0开始编号。有全球性的变量nv和ne,其中包含顶点数和定向边的数量(是边数量的两倍)。在圆盘三角剖分的情况下,有时一个顶点编号未使用。在本例中,全局int变量missing_vertex表示缺少什么。如果没有遗漏任何内容,missing_vertex<0。例如,如果nv=7且missing_vertex=2,则顶点实际上编号为0,1,3,4,5,6,7。图形作为有向边的集合保存(EDGE类型)。这些边是指针引用的结构。他们有这些字段,其中包括:int开始;边起点的顶点整数结束;边末端的顶点EDGE*反转;与此相反的定向边EDGE*下一个;沿顶点起点顺时针方向的下一条边EDGE*上一版本;顶点起点周围按顺时针顺序的上一条边要查找边,有一个数组firstedge[0..],键入EDGE*。firstedge[i]的值是指向其中一条开始的边的指针在顶点v处。例如,要“查看”顶点v的所有邻居,我们可以执行以下操作:边缘*e,*弹性;e=elast=第一条边[v];{查看e->end;e=e->下一个;}while(e!=elast);另一个例子是面部跟踪。假设我们有一条边e并且我们想“看看”e右边的所有边。elast=e;{看e;e=e->invers->prev;}while(e!=elast);如果您对上的脸感兴趣,请使用e=e->invers->nexte的左边。另一个有用的全局数组是degree[0..],它包含顶点的度数。“看”所有邻居的另一种方式顶点v的值是:for(count=degree[v],e=firstedge[v];--count>=0;e=e->next){查看e->end}要编写插件,您需要在单独的源代码中定义一些内容文件(我们称之为plugin.c),并将源文件命名为编译plantri.c时可用。例如,在大多数Unix系统上:cc-o plantri_plugin-O4'-DPLUGIN=“plugin.c”'plantri.c两种类型的所有引号都是必需的。此过程会将plugin.c的文本读入因此,每个文件中定义的所有内容都可以在这两个文件中使用。插件的工作是通过定义宏来完成的。这里我们列出可能定义的宏及其含义。如果你不这样做想要这些函数,就不要定义宏。FILTER这是为每个调用的过程的名称通常会输出的图的同构类型(除了在-d的情况下,它是拍摄前的原始图形双重)。调用顺序如下:int FILTER(int nbtot,int nbop,int doflip)该过程必须返回一个int值。如果值0为返回,则不写入图形。否则将被写入。参数的含义:nbtot=自同构总数nbop=O-P的规范标记数。如果存在O-R自同构,nbop=nbtot/2,而如果没有nbop=0或nbop=nbtot。如果存在方向反转自同构,则doflip=0,否则为1nbtot、nbop、doflip只有在-G或-o为鉴于。在这种情况下,完全自同构群是可用的;有关详细信息,请与作者联系。如果没有-G和-o,doflip=0和其他参数是未定义的。这些规则意味着doflip+1是要写入(除了嵌入的不敏感格式graph6和spare6,其中只有一个)。如果您正在使用FILTER用于统计具有特定属性的输出,并对每个输出进行计数道夫权重为+1的图。此过程可用于以其他格式写入图形。正常的输出文件(打开的文本文件)是outfile,除了如果给定了-u,在这种情况下,您必须打开一个文件您自己或使用stdout。SUMMARY在计算结束时,在期末考试之前调用汇总统计数据由plantri生成。类型:void SUMMARY(无效)它的主要用途是写入FILTER和其他插件组件。如果你也不想看到正常的总结,在返回之前,将全局变量dosummary设置为0。在plantri.c中查看统计数据是如何收集和编写的。所有统计信息都应写入文件msgfile。PLUGIN_INIT在执行开始时调用命令行开关已解码,但在任何图形之前生成。您可以使用它执行以下任务:(a) 测试开关是否对此插件有效。(b) 将开关值设置为适当的默认值。(c) 初始化此插件使用的数据结构。PLUGIN_SWITCHES这可以定义为添加额外的开关。机制用于检测开关及其值的检查plantri.c.以下是两个简单的案例:(a) 添加一个布尔开关-z:#如果(arg[j]=='z')zswitch=TRUE,则定义PLUGIN_SWITCHES;(b) 添加接受整数值的开关-z:#定义PLUGIN_SWITCHES else if(arg[j]=='z')\zvalue=获取开关值(arg,&j);在每种情况下,都必须定义和初始化新变量。您可以在plugin.c中的顶层实现这一点:(a) 静态int zswitch=FALSE;(b) 静态积分值=-1;检查zvalue是否有效,如果是,则给它一个默认值未指定(即仍为-1),可以使用PLUGIN_INIT完成。如果更改开关,还应重新定义宏出现在plantri.c第一行的开关。它是仅用于错误消息。PRE_FILTER_*这些是最难使用的宏需要了解程序的内部结构。植物通过从所需的最小图开始操作类,然后一次将其展开几个顶点,直到已达到输出大小。展开图的精确方法取决于图形类。PRE_FILTER_*的值是为计算的每个中间图求值的表达式在较小(或构造较少)的生成过程中在某些其他意义上)。如果表达式为0,则中间图未展开(因此没有它的后代出现在输出中)。如果值不是0,扩张照常进行。实际可用的宏有PRE_FILTER_SIMPLE、PRE_FILTER_MIN4、PRE_FILTER_BIP,PRE_FILTER_POLY、PRE_FILTER_DOUBLE、PRE_FELTER_ORDLOOP、,PRE_FILTER_SPECIALLOP、PRE_FILTER_QUAD、PRE_FELTER_MIN5。还有一些更复杂的宏可用,但描述它们会需要太多关于plantri内部的细节。一些插件示例随plantri一起发布:mdcount.c(生成plantri_mdcount)-按最小次数计算图形degseq.c(makes plantri_deg)-按度序列统计图形nft.c(makesplantrinft)-用非面三角形计数图maxdeg.c(makesplantri_md)-对最大度施加一个界限allowed_deg.c(makes plantri_ad)-指定允许的度数faceorbits.c(使plantri_fo)-计数平面嵌入显著的外表面附录E.图表计数。在本节中,我们列出了可以使用plantri生成。如果您在任何此类课程,请发送给我们以供纳入。这些表中的列标题为:nv=顶点数(或对偶中的面数)ne=边数(对偶中相同)nf=面数(或对偶中的顶点数)all=同构类计数O-P=方向保护同构类的计数。----------------------------------------------------------------三连通平面三角剖分(plantri)。nv ne nf所有O-P4 6 4 | 1 15 9 6 | 1 16 12 8 | 2 27 15 10 | 5 68 18 12 | 14 179 21 14 | 50 7310 24 16 | 233 38911 27 18 | 1249 2274年12 30 20 | 7595 1450213 33 22 | 49566 9703314 36 24 | 339722 67278115 39 26 | 2406841 479253016 42 28 | 17490241 3491178617 45 30 | 129664753 25910612218 48 32 | 977526957 195431534619 51 34 | 7475907149 1494936852420 54 36 | 57896349553 11578449693221 57 38 | 453382272049 90673698852722 60 40 | 3585853662949 717161384248823 63 42 | 28615703421545 57231089062625----------------------------------------------------------------最小度至少为4的3连通平面三角剖分,(plantri-m4)和4连通平面三角剖分(plantri-c4)。m4立方厘米nv ne nf all O-P所有O-P6 12 8 | 1 1 | 1 17 15 10 | 1 1 | 1 18 18 12 | 2 2 | 2 29 21 14 | 5 5 | 4 410 24 16 | 12 14 | 10 1211 27 18 | 34 45 | 25 3212 30 20 | 130 194 | 87 12813 33 22 | 525 891 | 313 51914 36 24 | 2472 4499 | 1357 243015 39 26 | 12400 23603 | 6244 1176516 42 28 | 65619 127887 | 30926 5991517 45 30 | 357504 705770 | 158428 31174418 48 32 | 1992985 3959653 | 836749 165963319 51 34 | 11284042 22494163 | 4504607 897184520 54 36 | 64719885 129227103 | 24649284 4919586321 57 38 | 375126827 749646288 | 136610879 27294085522 60 40 | 2194439398 4387116659 | 765598927 153041795323 63 42 | 12941995397 25878895923 | 4332047595 866193613724 66 44 | 76890024027 153765144588 | 24724362117 4944267832225 69 46 | 459873914230 919704309272 | 142205424580 28439394650126 72 48 | 2767364341936 5534600480206 | 8236875607019 164732745572627 75 50 | 16747182732792 | 4801749063379注意:此表的早期版本为提供了不同的值nv=23行上的第一个计数。那是因为笔误而不是程序错误。----------------------------------------------------------------无3连通性要求的平面三角剖分:2-最小连接度至少为3(plantri-c2)1-最小连接度至少为3且无两面共享多条边(plantri-c1)1-以最小程度至少3(plantri-c1t)连接。这些连通性是下限,而不是精确值。二氧化碳nv所有O-P4 | 1 15 | 1 16 | 3 37 | 8 98 | 32 379 | 131 18310 | 723 115611 | 4360 771312 | 29632 5543613 | 213168 41219314 | 1606633 315839215 | 12473723 2473613816 | 99141919 19744834817 | 802392930 160148123818 | 6593377305 1317347115119 | 54883010885 10971244794920 | 462038444588 92385850212821 | 3928893849911 7856893675780c1 c1tnv所有O-P所有O-P4 | 1 1 | 1 15 | 1 1 | 1 16 | 3 3 | 3 37 | 9 10 | 9 108 | 37 42 | 38 439 | 172 230 | 178 23610 | 993 1523 | 1041 157711 | 6308 10737 | 6652 1118812 | 44145 80319 | 46738 8419413 | 327051 620134 | 347050 65327114 | 2530761 4913112 | 2691419 519880915 | 20179785 39705720 | 21509955 4218408316 | 164672106 326420796 | 175969274 34808827717 | 1368137926 2723097802 | 1465921468 291396748718 | 11536196188 23012381739 | 12395111621 2470642543419 | 98494508358 196713776094 | 106126249031 21185694055820 | 850073936750 1698875856077 | 918520748281 183516073139121 | 7406965136219 14808015829668 | 8025676381104 16042357404748----------------------------------------------------------------3连通平面欧拉三角剖分(plantri-b),和4连通平面欧拉三角剖分(plantri-bc4)。公元前4年nv ne nf all O-P所有O-P6 12 8 |1 1 |1 17 15 10 | 0 0 | 0 08 18 12 | 1 1 | 1 19 21 14 | 1 1 | 0 010 24 16 | 2 2 | 2 211 27 18 | 2 2 | 1 112 30 20 | 8 9 | 5 613 33 22 | 8 11 | 3 314 36 24 | 32 41 | 18 2215 39 26 | 57 89 | 19 2516 42 28 | 185 296 | 79 11217 45 30 | 466 829 | 134 21418 48 32 | 1543 2772 | 501 81719 51 34 | 4583 8746 | 1147 205820 54 36 | 15374 29461 | 3976 718821 57 38 | 50116 98342 | 11055 2103622 60 40 | 171168 336881 | 37231 7118523 63 42 | 582603 1156559 | 114560 22410324 66 44 | 2024119 4024297 | 384053 75356125 69 46 | 7057472 14075250 | 1244056 246435526 72 48 | 24873248 49638364 | 4193857 832164927 75 50 | 88111772 176037177 | 13977946 2784170628 78 52 | 314301078 628107157 | 47522279 9473795029 81 54 | 1126716000 2252541666 | 161222224 32188979730 84 56 | 4060375677 8118442511 | 553033544 110462010131 87 58 | 14697571234 29390845869 | 1899744032 379676642432 90 60 | 53432834170 106854715443 | 6571595339 1313625671033 93 62 | 195015189626 390009407529 | 22793047258 4557262555434 96 64 | 714404259151 1428755867040 | 79449718217 158865787212 35 99 66 | 2626130395699 5252157292165 | 277760027418 55545288273636 102 68 | 9685071313079 | 974836112457----------------------------------------------------------------凸多面体(3-连通平面简单图,plantri-p),最小度至少为4的凸多面体(plantri-pm4)。p pm4(百万分之四)nv所有O-P所有O-P4 1 1 |5 2 2 |6 7 8 |17 34 45 | 1 18 257 419 | 4 49 2606 4798 | 14 1610 32300 62754 | 67 9911 440564 872411 | 428 72012 6384634 12728018 | 3515 653113 96262938 192324654 | 31763 6167714 1496225352 2991463239 | 307543 60778715 23833988129 47663036427 | 3064701 610180016 387591510244 775158142233 | 31199068 6228875017 6415851530241 12831576165782 | 322264655 64410191418 107854282197058 | 3369911732 673812701819 | 35611596455 7121644702220 | 379881408164 75973575177021 | 4086847012014 8173585336482----------------------------------------------------------------圆盘三角剖分:3连通(plantri-P),或精确2-连通但没有2度顶点(plantri-Pc2x),或与外部2度顶点完全2连接允许的表面(plantri-Pc2m2)。P(P)nv所有O-P4第1页5 2 26 7 87 27 378 132 2139 773 138610 5017 952411 34861 6805712 253676 50185813 1903584 378874714 14616442 2917066715 114254053 22829561816 906266345 181180281817 7277665889 1455280449218 59066524810 11812425745119 483864411124 96769804945520 3996427278475 799274642796321 33250623548406 66500865364037Pc2x Pc2xm2个nv所有O-P所有O-P3 | 1 14 | 1 15 | 2 26 1 1 | 9 127 4 5 | 36 568 27 42 | 196 3419 163 289 | 1160 216810 1131 2130 | 7616 1473211 8030 15631 | 52605 10361912 59412 117319 | 379339 75333613 448361 891666 | 2814161 561064914 3447550 6877352 | 21363658 4266698915 26887369 53713758 | 165164873 33012508416 212338376 424461698 | 1296637273 259256670617 1695218973 3389687444 | 10312933521 2062342342418 13666153626 27329645755 | 82959235392 16590992918119 111136594337 222263795690 | 674004472100 134797907886920 910959545329 1821885598755 | 5524400982592 1104869665890721 7520705838434 15041292477945 | 4563744898918 91274524809807----------------------------------------------------------------最小度数为5(plantri-m5)的3连通平面三角剖分,最小度为5的3连通平面图(凸多面体)(plantri-pm5)。三角剖分多边形nv ne nf all O-P所有O-P12 30 20 | 1 1 | 1 113 33 22 | 0 0 | 0 014 36 24 | 1 1 | 1 115 39 26 | 1 1 | 1 116 42 28 | 3 4 | 5 617 45 30 | 4 4 | 8 818 48 32 | 12 17 | 30 4619 51 34 | 23 33 | 85 13520 54 36 | 73 117 | 392 68621 57 38 | 192 331 | 1587 296122 60 40 | 651 1180 | 7657 1474423 63 42 | 2070 3899 | 36291 7120724 66 44 | 7290 14052 | 180444 35730825 69 46 | 25381 49667 | 898310 178761126 72 48 | 91441 180502 | 4532719 904223827 75 50 | 329824 654674 | 22949165 4583960128 78 52 | 1204737 2398527 | 116805726 23345735929 81 54 | 4412031 8800984 | 596228948 119206618030 84 56 | 16248772 32447008 | 3052696452 610436648431 87 58 | 59995535 119883207 | 15667197926 3133175292832 90 60 | 222231424 444226539 | 80591725752 16117653053533 93 62 | 825028656 1649550311 | 415411427833 83080492859434 96 64 | 3069993552 6138874486 | 2145396827091 429074657825435 99 66 | 11446245342 22890091062 | 11100060860777 2219999930586936 102 68 | 42758608761 85511947468 |37 105 70 | 160012226334 320013030067 |38 108 72 | 599822851579 1199620598580|39 111 74 | 2252137171764 4504219709753 |40 114 76 | 8469193859271 16938267502048 |此表的早期版本的nv=29值8800984不正确原因不明。看起来这个节目总是有回答正确。----------------------------------------------------------------三连通平面四边形(plantri-q)。四边形nv ne nf所有O-P8 12 6 | 1 19 14 7 | 0 010 16 8 | 1 111 18 9 | 1 112 20 10 | 3 413 22 11 | 3 314 24 12 | 11 1515 26 13 | 18 2516 28 14 | 58 9217 30 15 | 139 23418 32 16 | 451 80319 34 17 | 1326 246920 36 18 | 4461 851221 38 19 | 14554 2829022 40 20 | 49957 9814823 42 21 | 171159 33867324 44 22 | 598102 118833825 46 23 | 2098675 418085426 48 24 | 7437910 1484003127 50 25 | 26490072 5290456228 52 26 | 94944685 18972451029 54 27 | 341867921 68338421830 56 28 | 1236864842 247296142331 58 29 | 4493270976 8984888982 32 60 30 | 16387852863 3277208544733 62 31 | 59985464681 119963084542 34 64 32 | 220320405895 44062358674035 66 33 | 811796327750 162355511761136 68 34 | 3000183106119 6000283550482(在该表的早期版本中,nv=31的两个值为互换。感谢雨果·普福尔特纳的关注。)附录F版本历史普兰特里的原版,只表演了当前版本的功能于1996年6月发布。在这里我们将列出最近版本的功能中所做的更改只有。内部变更列于plantri.c中。3.0版:2000年4月25日发布。版本3.1:2000年7月3日发布。Thom Sulanke发现三角剖分在26个或更多顶点处停止正常工作。该错误不会影响中列出的任何计算大小附录E。我们认为唯一可能的遭遇方式分布式软件的错误是使用maxdeg或允许deg程序用于26个或更多顶点。正确操作与-m4,-c4,-b和min5插件没有受到影响。3.1版在不更改程序的情况下更正了错误行为。非常感谢Thom的帮助。版本4.0:2001年4月20日发布。为3连通四边形添加-q。为一般平面图添加了-pc1和-pc2。添加了-m5和变体。不再需要插件min5.c。spare6输出现在只表示一次循环。版本4.1:2001年11月30日发布。为四边形类型添加了-qc2、-qc4、-qm2c2。版本4.3:2007年8月5日发布。添加了-V:只写那些具有非平凡组的添加-E:在边缘代码中写入输出添加-bp:一般二部图-p现在可以生成2或3个顶点的图4.4版:2009年5月2日发布。固定-pc1x和-pc2x修复了-p和-pb中不正确的连接计算,唯一已知的问题是-c1x、-c2x和统计数据报告人-v版本4.5:2011年9月5日发布。还将FAST_FILTER_*应用于起始图形(所有使用都需要检查针对代码,因为可能需要定义多个筛选器)