/*文件名:Squares.cpp目的:计算以不同尺寸矩形为边界的方形晶格的所有可能的方形平铺。计算由不同大小的长方体包围的立方晶格的所有可能的立方平铺。计算不受限制的平铺集,包括旋转和反射,以及限制平铺集。确定每个对称组中的平铺数。要计算平铺数,请执行以下操作:不同数量的零件.不同数量的0和1. ...生成信息:程序使用Microsoft Visual C++速成版生成为控制台项目,并要求头文件stdafx.h包含头文件:#包括#包括#包括#包括#包括#包括发展历史:由Chris Gribble于2013年开发。*/#包括“stdafx.h”使用名称空间系统;使用命名空间标准;const int maxNodes=400;/*有界晶格中允许的最大节点数*/const int maxNeighbors=6;/*节点可以具有的最大邻居数*/const int maxPartSets=200;/*不同正方形部分集的最大数量*/const int maxTilings=10000;/*最大平铺数*/int计数[10],zeroCount;/*计数器*/int nodeNeighbors[maxNodes][maxNeighbers];/*网格中每个节点的邻居列表*/int numberOfNodeNeighbors[maxNodes];/*每个节点的邻居数*/int numberOfZeros[maxNodes];/*每个无限制平铺中0个数的直方图*/int numberOfZerosInequivalent[maxNodes];/*每个不等平铺中0个数的直方图*/int numberOfZerosPartSet[maxNodes];/*每个零件集中0的数量直方图*/int partSetCount[maxPartSets];/*每组零件在无限制平铺集中出现的次数*/int partSetCountInequivalent[maxPartSets];/*每套零件在不等瓷砖中出现的次数*/int partSets[maxPartSets][12];/*不同的零件组*/整数a、b、c;/*分别在x、y和z方向上的晶格边界尺寸*/整数h,i,j,k,l,m,n;/*循环计数器*/int firstTiling,lastTiling;/*指向平铺列表中迭代生成的第一个和最后一个平铺的指针*/int numberOfTilings;/*要显示的平铺数*/整数平铺索引;/*平铺列表的索引*/__int16部分[maxNodes];/*平铺中每种大小的正方形数*/__int16旋转090[maxNodes];/*节点阵列旋转90度*/__int16旋转180[maxNodes];/*节点阵列旋转180度*/__int16旋转270[maxNodes];/*节点阵列旋转270度*/__int16反射水平[maxNodes];/*节点阵列关于水平轴的反射*/__int16 reflectVert[maxNodes];/*节点阵列关于垂直轴的反射*/__int16 refHorizRot90[最大节点];/*节点阵列绕水平轴的反射,然后旋转90度*/__int16 refVertRot90[maxNodes];/*节点阵列绕垂直轴反射,然后旋转90度*/__int16平铺Ind[maxTilings];/*-1=平铺不明显,即是具有较低索引的平铺的旋转或反射0=尚未检查瓷砖>0=平铺是不同的,有1、2、4或8种不同的变换*/__int16平铺部件集[maxTilings];/*每个平铺的部件集索引*/__int16格子面积;/*有界晶格的面积*/__int16格子维度;/*用户指定的晶格尺寸(2或3)*/__int16最大平方;/*可以合并到平铺中的最大正方形数*/__int16 maxSquareSize;/*适合矩形晶格的正方形的最大尺寸*/__int16节点;/*节点号*/__int16个节点数;/*有界晶格中的节点数*/__int16个零件集;/*不同零件组的数量*/__int16 numberOfSquares;/*瓷砖中包含的正方形数量*/__int16部分匹配;/*在2个平铺中匹配的部件数*/bool完成;/*指示程序运行是否已完成*/布尔重复;/*指示是否找到重复平铺*/布尔平铺[maxNodes];/*平铺由每个节点的值0或1组成:0=节点没有邻居,位于尺寸为2x2的正方形内1=节点有邻居,位于尺寸为1x1<=square<=axa的正方形的边界上*/bool**实用程序列表;/*平铺列表,包括不同的旋转和反射*/int main(){/*该程序计算所有可能的平铺,其中包括由用户指定大小的矩形包围的不同大小的方形晶格。它还计算所有可能的平铺,其中立方体的大小不同,立方体由用户指定的长方体大小限定。特别是,它确定了旋转和反射下的所有等效和不相等平铺。它将等价和不等价瓷砖划分为1、2、4和8级的组。它计算每个平铺中每个大小的正方形/立方体的数量。在2D模式下,系统会提示用户提供矩形a和b的尺寸。在3D模式下,系统会提示用户提供长方体a、b和c的尺寸。程序的第一部分确定相关晶格中每个节点的邻居集。选择2D晶格的节点编号约定为:a=b=2 0 12 3a=2,b=30 12 34 5a=3,b=2 0 1 23 4 5a=b=3 0 1 23 4 56 7 8a=b=4 0 1 2 34 5 6 78 9 10 1112 13 14 15a=b=5 0 1 2 3 45 6 7 8 910 11 12 13 1415 16 17 18 1920 21 22 23 24选择三维晶格的节点编号约定为:a=b=c=2 0 12 34 56 7a=b=c=3 0 1 23 4 56 7 89 10 1112 13 1415 16 1718 19 2021 22 2324 25 26a=b=c=4 0 1 2 34 5 6 78 9 10 1112 13 14 1516 17 18 1920 21 22 2324 25 26 2728 29 30 3132 33 34 3536 37 38 3940 41 42 4344 45 46 4748 49 50 5152 53 54 5556 57 58 5960 61 62 63*//*创建输出文件*/fstream文件;文件.open(“Squares.txt”,ios_base::out|ios_base::trunc);/*初始化变量*/瓷砖数量=0;/*将生成的平铺数设置为零*//*获取晶格类型*/cout<<“输入晶格尺寸[2=2D/3=3D]”;cin>>格维数;if(latticeDimension!=2&&latticeDimension!=3)goto错误;if(晶格维度==2){/*获取晶格的尺寸*/cout<<“输入矩形长度>1,a=”;/*获取长度尺寸a a a*/cin>>a;如果(a<2)goto错误;cout<<“输入矩形宽度>1,b=”;/*获得宽度尺寸b*/cin>>b;/*b*//*b条*//*b条*/如果(b<2)goto错误;numberOfNodes=a*b;if(numberOfNodes>maxNodes)goto错误;file<<“Lattice有2个维度”<<endl;文件<<“矩形的长度,a=”<<a<<endl;file<<“矩形宽度,b=”<<b<<endl;/*程序的第一部分创建邻居数组。程序的这一部分分为三个部分*//*确保阵列干净*/对于(i=0;i<numberOfNodes;i++){对于(j=0;j<maxNeighbors;j++){nodeNeighbors[i][j]=0;}}/*第一部分确定晶格的角点,每个角点有两个相邻点*//*并识别它们*//*第一部分*//*左上角*/i=0;numberOfNodeNeighbors[i]=2;nodeNeighbors[i][0]=1;节点邻居[i][1]=a;/*右上角*/i=a-1;numberOfNodeNeighbors[i]=2;nodeNeighbors[i][0]=a-2;nodeNeighbors[i][1]=2*a-1;/*左下角*/i=a*b-a;numberOfNodeNeighbors[i]=2;nodeNeighbors[i][0]=a*b-2*a;nodeNeighbors[i][1]=a*b-a+1;/*右下角*/i=a*b-1;numberOfNodeNeighbors[i]=2;nodeNeighbors[i][0]=a*b-a-1;nodeNeighbors[i][1]=a*b-2;/*第二部分计算出有3个邻居的晶格点*//*这些点位于矩形的4条边上,不是角点*//*第二部分*//*长度[a]方向的边。如果a=2,则不会执行此操作,因为那时没有边节点*/如果(a>2){/*上边缘*/对于(i=1;i<=a-2;i++){numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-1;nodeNeighbors[i][1]=i+1;nodeNeighbors[i][2]=i+a;}/*底部边缘*/对于(i=a*b-a+1;i=a*b-2;i++){numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+1;}}/*长度[b]方向的边*/如果(b>2){/*左侧边缘*/对于(i=a;i<=a*b-2*a;i+=a){numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i+1;nodeNeighbors[i][2]=i+a;}/*右侧边缘*/对于(i=2*a-1;i<=a*b-a-1;i+=a){numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+a;}}/*第三部分确定了具有4个邻居的晶格点*//*这些点都位于矩形内*//*第三部分*/对于(i=0;i<numberOfNodes;i++){if(numberOfNodeNeighbors[i]==0){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+1;nodeNeighbors[i][3]=i+a;}}}else if(晶格维度==3){/*获取晶格的尺寸*/cout<<“输入长方体的长度,a=”;/*获取长度尺寸a a a*/cin>>a;如果(a<2)goto错误;cout<<“输入长方体宽度,b=”;/*获得宽度尺寸b*/cin>>b;/*b*//*b条*//*b条*/如果(b<2)goto错误;cout<<“输入长方体高度,c=”;/*获得高度尺寸c*/cin>>c;/*c*//*c(c)*//*c(c)*/如果(c<2)goto错误;numberOfNodes=a*b*c;if(numberOfNodes>maxNodes)goto错误;file<<“Lattice有3个维度”<<endl;file<<“长方体长度,a=”<<a<<endl;file<<“长方体宽度,b=”<<b<<endl;file<<“长方体高度,c=”<<c<<endl;/*程序的第一部分创建邻居数组。程序的这一部分有4个部分*//*确保阵列干净*/对于(i=0;i<numberOfNodes;i++){对于(j=0;j<maxNeighbors;j++){nodeNeighbors[i][j]=0;}}/*第一部分找到晶格的角点,并为它们指定数字3,因为它们有三个邻居*//*然后,计算出每个角落的邻居*//*第一部分*//*上表面,左上角*/i=0;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i+1;节点邻居[i][1]=i+a;nodeNeighbors[i][2]=i+a*b;/*上表面,右上角*/i=a-1;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-1;节点邻居[i][1]=i+a;nodeNeighbors[i][2]=i+a*b;/*上表面,左下角*/i=a*b-a;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i+1;nodeNeighbors[i][2]=i+a*b;/*上表面,右下角*/i=a*b-1;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+a*b;/*下表面,左上角*/i=a*b*c-a*b;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i+1;nodeNeighbors[i][2]=i+a;/*下表面,右上角*/i=a*b*c-a*b+a-1;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+a;/*下表面,左下角*/i=a*b*c-a;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i+1;/*下表面,右下角*/i=a*b*c-1;numberOfNodeNeighbors[i]=3;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i-1;/*第二部分计算出有4个邻居的晶格点*//*这些点位于立方体的边上*//*因为有十二条边,所以我们需要十二个环*//*第二部分*//*长度[a]方向上的顶面和底面边缘。如果a=2,则不会执行此操作,因为那时没有边节点*/如果(a>2){对于(i=1;i<=a-2;i++){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-1;nodeNeighbors[i][1]=i+1;nodeNeighbors[i][2]=i+a;nodeNeighbors[i][3]=i+a*b;}对于(i=a*b-a+1;i=a*b-2;i++){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+1;nodeNeighbors[i][3]=i+a*b;}对于(i=a*b*c-a*b+1;i<=a*b*c-a*b+a-2;i++){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+1;nodeNeighbors[i][3]=i+a;}对于(i=a*b*c-a+1;i<=a*b*c-2;i++){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i-1;nodeNeighbors[i][3]=i+1;}}/*长度[b]方向上的顶面和底面边缘*/如果(b>2){对于(i=a;i<=a*b-2*a;i+=a){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i+1;nodeNeighbors[i][2]=i+a;nodeNeighbors[i][3]=i+a*b;}对于(i=2*a-1;i<=a*b-a-1;i+=a){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+a;nodeNeighbors[i][3]=i+a*b;}对于(i=a*b*c-a*b+a;i<=a*b*c-2*a;i+=a){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i+1;nodeNeighbors[i][3]=i+a;}对于(i=a*b*c-a*b+2*a-1;i<=a*b*c-a-1;i+=a){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i-1;nodeNeighbors[i][3]=i+a;}}/*侧面边缘*/如果(c>2){对于(i=a*b;i<=a*b*c-2*a*b){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i+1;nodeNeighbors[i][2]=i+a;nodeNeighbors[i][3]=i+a*b;}对于(i=a*b+a-1;i<=a*b*c-2*a*b+a-1;i+=a*b){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-1;nodeNeighbors[i][2]=i+a;nodeNeighbors[i][3]=i+a*b;}对于(i=2*a*b-a;i<=a*b*c-a*b-a;i+=a*b){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i+1;nodeNeighbors[i][3]=i+a*b;}对于(i=2*a*b-1;i<=a*b*c-a*b-1;i+=a*b){numberOfNodeNeighbors[i]=4;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i-1;nodeNeighbors[i][3]=i+a*b;}}/*第三部分*//*面内侧的每个晶格点都有5个邻居*/如果(a>2&&b>2){/*顶面*/对于(i=1;i<=b-2;i++){对于(j=1;j<=a-2;j++){k=i*a+j;numberOfNodeNeighbors[k]=5;nodeNeighbors[k][0]=k-a;nodeNeighbors[k][1]=k-1;nodeNeighbors[k][2]=k+1;nodeNeighbors[k][3]=k+a;nodeNeighbors[k][4]=k+a*b;}}/*底面*/对于(i=1;i<=b-2;i++){对于(j=1;j<=a-2;j++){k=i*a+j+a*b*(c-1);numberOfNodeNeighbors[k]=5;nodeNeighbors[k][0]=k-a*b;nodeNeighbors[k][1]=k-a;nodeNeighbors[k][2]=k-1;nodeNeighbors[k][3]=k+1;nodeNeighbors[k][4]=k+a;}}}如果(a>2&&c>2){/*正面*/对于(i=1;i<=c-2;i++){对于(j=1;j<=a-2;j++){k=(i+1)*a*b+j-a;numberOfNodeNeighbors[k]=5;nodeNeighbors[k][0]=k-a*b;nodeNeighbors[k][1]=k-a;nodeNeighbors[k][2]=k-1;nodeNeighbors[k][3]=k+1;nodeNeighbors[k][4]=k+a*b;}}/*背面*/对于(i=1;i<=c-2;i++){对于(j=1;j<=a-2;j++){k=i*a*b+j;numberOfNodeNeighbors[k]=5;nodeNeighbors[k][0]=k-a*b;nodeNeighbors[k][1]=k-1;nodeNeighbors[k][2]=k+1;nodeNeighbors[k][3]=k+a;nodeNeighbors[k][4]=k+a*b;}}}如果(b>2&&c>2){/*右脸*/对于(i=1;i<=c-2;i++){对于(j=1;j<=b-2;j++){k=i*a*b+a*j+a-1;numberOfNodeNeighbors[k]=5;nodeNeighbors[k][0]=k-a*b;nodeNeighbors[k][1]=k-a;nodeNeighbors[k][2]=k-1;nodeNeighbors[k][3]=k+a;nodeNeighbors[k][4]=k+a*b;}}/*左侧*/对于(i=1;i<=c-2;i++){对于(j=1;j<=b-2;j++){k=i*a*b+j*a;numberOfNodeNeighbors[k]=5;nodeNeighbors[k][0]=k-a*b;nodeNeighbors[k][1]=k-a;nodeNeighbors[k][2]=k+1;nodeNeighbors[k][3]=k+a;nodeNeighbors[k][4]=k+a*b;}}}/*第四部分*//*每个其他节点必须位于长方体内部,并且有6个相邻节点*/对于(i=0;i<numberOfNodes;i++){if(numberOfNodeNeighbors[i]==0){numberOfNodeNeighbors[i]=6;nodeNeighbors[i][0]=i-a*b;nodeNeighbors[i][1]=i-a;nodeNeighbors[i][2]=i-1;nodeNeighbors[i][3]=i+1;nodeNeighbors[i][4]=i+a;nodeNeighbors[i][5]=i+a*b;}}}文件<<endl;if(晶格维度==2){/*生成矩形的所有平铺*/格子面积=(a-1)*(b-1);如果(a<=b){maxSquareSize=a;}其他的{maxSquareSize=b;}/*为平铺阵列分配空间*/tilingList=(bool**)malloc(maxTilings*sizeof(bool*));对于(i=0;i<最大平铺;i++){tilingList[i]=(bool*)malloc(节点数*大小(bool));}/*构建所有边缘都存在的初始平铺*/对于(i=0;i<numberOfNodes;i++){瓷砖[i]=1;}/*指定方形零件*/对于(i=0;i<=maxSquareSize;i++){部件[i]=0;}部件[1]=格子面积;/*记录瓷砖和零件*/瓷砖数量=1;cout<<平铺数量<<endl;对于(i=0;i<numberOfNodes;i++){平铺列表[numberOfTilings-1][i]=平铺[i];}零件集数量=1;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}tilingPartSet[numberOfTilings-1]=零件集数量-1;/*输出平铺*//*文件<<“平铺”<<numberOfTilings<<endl;对于(i=0;i<numberOfNodes;i++){文件<<平铺[i]<<“”;如果(i%a==a-1)文件<<endl;}文件<<endl;*/如果(maxSquareSize>2){/*确定涉及((a-1)(b-1)-4)1x1正方形和1 2x2正方形的所有瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}部件[1]=格子区域-4;部件[2]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if(NodeNeighbors[i]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点i的连接,使其成为1个2x2正方形*/平铺[i]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}/*确定所有涉及1x1和2x2正方形的瓷砖*/最大平方=((a-1)/2)*((b-1)/2);firstTiling=1;lastTiling=瓷砖数量-1;for(numberOfSquares=1;numberOfSquares<=maxSquares;number OfSqueres++){for(tilingIndex=firstTiling;tilingIndex<=lastTiling,tilingIndexe++){对于(i=节点数-1;i>=0;i--){if(平铺列表[tilingIndex][i]==0){节点=i+1;断裂;}}for(i=节点;i<节点数;i++){如果(numberOfNodeNeighbors[i]==4){/*获取以前生成的平铺及其方形部分*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[tilingIndex][j];}对于(j=0;j<=maxSquareSize;j++){parts[j]=partSets[tilingPartSet[tilingIndex]][j];}if((平铺[i-a-1]==1)&&(平铺[i-a]==1)&&(平铺[i-a+1]==1)&&(平铺[i-1]==1)&&(平铺[i]==1)&&(平铺[i+1]==1)&&(平铺[i+a-1]==1)&&(平铺[i+a]==1)&&(平铺[i+a+1]==1){/*消除内部节点i的连接,形成2x2正方形*/平铺[i]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}/*形成方形部件*/部件[1]=部件[1]-4;部件[2]=部件[2]+1;对于(j=0;j<=maxSquareSize;j++){if(parts[j]!=partSets[numberOfPartSets-1][j]){断裂;}}如果(j<maxSquareSize){零件集数量++;对于(j=0;j<=maxSquareSize;j++){partSets[numberOfPartSets-1][j]=部件[j];}}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}/*更新了上下瓷砖指数*/firstTiling=lastTiling+1;lastTiling=瓷砖数量-1;}}如果(maxSquareSize>3){/*确定涉及((a-1)(b-1)-9)1x1正方形和1 3x3正方形的所有瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}parts[1]=格子面积-9;部件[3]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点的连接,形成3x3正方形*/平铺[i]=0;平铺[i+1]=0;平铺[a+i]=0;平铺[a+i+1]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}/*确定所有涉及1x1、2x2和3x3正方形的瓷砖*/最大平方=(a-1)/3)*(b-1)/3;firstTiling=1;lastTiling=瓷砖数量-1;for(numberOfSquares=1;numberOfSquares<=maxSquares;number OfSqueres++){for(tilingIndex=firstTiling;tilingIndex<=lastTiling,tilingIndexe++){对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4){/*获取以前生成的平铺及其方形部分*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[tilingIndex][j];}对于(j=0;j<=maxSquareSize;j++){parts[j]=partSets[tilingPartSet[tilingIndex]][j];}if((平铺[i-a-1]==1)&&(平铺[i-a]==1)&&(平铺[i-a+1]==1)&&(平铺[i-a+2]==1)&&(平铺[i-1]==1)&&(平铺[i]==1)&&(平铺[i+1]==1)&&(平铺[i+2]==1)&&(平铺[i+a-1]==1)&&(平铺[i+a]==1)&&(平铺[i+a+1]==1)&&(平铺[i+a+2]==1)&&(平铺[i+2*a-1]==1)&&(平铺[i+2*a]==1)&&(平铺[i+2*a+1]==1)&&(平铺[i+2*a+2]==1){/*消除内部节点的连接,形成3x3正方形*/平铺[i]=0;平铺[i+1]=0;平铺[a+i]=0;平铺[a+i+1]=0;/*将瓷砖与其他相关瓷砖进行比较,以防止重复*/重复=假;for(k=最后平铺;k<=平铺数;k++){n=0;对于(l=0;l<节点数;l++){if(平铺[l]==平铺列表[k][l]){n=n+1;}}如果(n==节点数){duplicate=true;}}if(重复==false){/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}/*形成方形部件*/parts[1]=parts[1]-9;部件[3]=部件[3]+1;对于(j=0;j<=maxSquareSize;j++){if(parts[j]!=partSets[numberOfPartSets-1][j]){断裂;}}如果(j<maxSquareSize){零件集数量++;对于(j=0;j<=maxSquareSize;j++){partSets[numberOfPartSets-1][j]=部件[j];}}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}}/*更新上下平铺索引*/firstTiling=lastTiling+1;lastTiling=瓷砖数量-1;}}如果(maxSquareSize>4){/*确定涉及((a-1)(b-1)-16)1x1正方形和1 4x4正方形的所有瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}部件[1]=格子面积-16;部件[4]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点的连接以形成4x4方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}/*确定所有涉及1x1、2x2、3x3和4x4正方形的瓷砖*/最大平方=((a-1)/4)*((b-1)/4);firstTiling=1;lastTiling=瓷砖数量-1;for(numberOfSquares=1;numberOfSquares<=maxSquares;number OfSqueres++){for(tilingIndex=firstTiling;tilingIndex<=lastTiling,tilingIndexe++){对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4){/*获取以前生成的平铺及其方形部分*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[tilingIndex][j];}对于(j=0;j<=maxSquareSize;j++){parts[j]=partSets[tilingPartSet[tilingIndex]][j];}if((平铺[i-a-1]==1)&&(平铺[i-a]==1)&&(平铺[i-a+1]==1)&&(平铺[i-a+2]==1)&&(平铺[i-a+3]==1)&&(平铺[i-1]==1)&&(平铺[i]==1)&&(平铺[i+1]==1)&&(平铺[i+2]==1)&&(平铺[i+3]==1)&&(平铺[i+a-1]==1)&&(平铺[i+a]==1)&&(平铺[i+a+1]==1)&&(平铺[i+a+2]==1)&&(平铺[i+a+3]==1)&&(平铺[i+2*a-1]==1)&&(平铺[i+2*a]==1)&&(平铺[i+2*a+1]==1)&&(平铺[i+2*a+2]==1)&&(平铺[i+2*a+3]==1)&&(平铺[i+3*a-1]==1)&&(平铺[i+3*a]==1)&&(平铺[i+3*a+1]==1)&&(平铺[i+3*a+2]==1)&&(平铺[i+3*a+3]==1){/*消除内部节点的连接,形成4x4正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;/*将瓷砖与其他相关瓷砖进行比较,以防止重复*/重复=假;for(k=最后平铺;k<=平铺数;k++){n=0;对于(l=0;l<节点数;l++){if(平铺[l]==平铺列表[k][l]){n=n+1;}}如果(n==节点数){duplicate=true;}}if(重复==false){/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}/*形成方形部件*/部件[1]=部件[1]-16;部件[4]=部件[4]+1;对于(j=0;j<=maxSquareSize;j++){if(parts[j]!=partSets[numberOfPartSets-1][j]){断裂;}}如果(j<maxSquareSize){零件集数量++;对于(j=0;j<=maxSquareSize;j++){partSets[numberOfPartSets-1][j]=部件[j];}}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}}/*更新上下平铺索引*/firstTiling=lastTiling+1;lastTiling=瓷砖数量-1;}}如果(maxSquareSize>5){/*确定所有涉及((a-1)(b-1)-25)1x1正方形和1 5x5正方形的瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}部件[1]=格子面积-25;零件[5]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点的连接,形成5x5正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}/*确定所有涉及1x1、2x2、3x3、4x4和5x5正方形的瓷砖*/最大平方=((a-1)/5)*((b-1)/5);firstTiling=1;lastTiling=瓷砖数量-1;for(numberOfSquares=1;numberOfSquares<=maxSquares;number OfSqueres++){for(tilingIndex=firstTiling;tilingIndex<=lastTiling,tilingIndexe++){对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4){/*获取以前生成的平铺及其方形部分*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[tilingIndex][j];}对于(j=0;j<=maxSquareSize;j++){parts[j]=partSets[tilingPartSet[tilingIndex]][j];}if((平铺[i-a-1]==1)&&(平铺[i-a]==1)&&(平铺[i-a+1]==1)&&(平铺[i-a+2]==1)&&(平铺[i-a+3]==1)&&(平铺[i-a+4]==1)&&(平铺[i-1]==1)&&(平铺[i]==1)&&(平铺[i+1]==1)&&(平铺[i+2]==1)&&(平铺[i+3]==1)&&(平铺[i+4]==1)&&(平铺[i+a-1]==1)&&(平铺[i+a]==1)&&(平铺[i+a+1]==1)&&(平铺[i+a+2]==1)&&(平铺[i+a+3]==1)&&(平铺[i+a+4]==1)&&(平铺[i+2*a-1]==1)&&(平铺[i+2*a]==1)&&(平铺[i+2*a+1]==1)&&(平铺[i+2*a+2]==1)&&(平铺[i+2*a+3]==1)&&(平铺[i+2*a+4]==1)&&(平铺[i+3*a-1]==1)&&(平铺[i+3*a]==1)&&(平铺[i+3*a+1]==1)&&(平铺[i+3*a+2]==1)&&(平铺[i+3*a+3]==1)&&(平铺[i+3*a+4]==1)&&(平铺[i+4*a-1]==1)&&(平铺[i+4*a]==1)&&(平铺[i+4*a+1]==1)&&(平铺[i+4*a+2]==1)&&(平铺[i+4*a+3]==1)&&(平铺[i+4*a+4]==1){/*消除内部节点的连接,形成5x5正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;/*将瓷砖与其他相关瓷砖进行比较,以防止重复*/重复=假;for(k=最后平铺;k<=平铺数;k++){n=0;对于(l=0;l<节点数;l++){if(平铺[l]==平铺列表[k][l]){n=n+1;}}如果(n==节点数){duplicate=true;}}if(重复==false){/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}/*形成方形部件*/部件[1]=部件[1]-25;部件[5]=部件[5]+1;对于(j=0;j<=maxSquareSize;j++){if(parts[j]!=partSets[numberOfPartSets-1][j]){断裂;}}如果(j<maxSquareSize){零件集数量++;对于(j=0;j<=maxSquareSize;j++){partSets[numberOfPartSets-1][j]=部件[j];}}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}}/*更新上下平铺索引*/firstTiling=lastTiling+1;lastTiling=瓷砖数量-1;}}如果(maxSquareSize>6){/*确定所有涉及((a-1)(b-1)-36)1x1正方形和1 6x6正方形的瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}部件[1]=格子面积-36;部件[6]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数量[i+4]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数[a+i+4]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[2*a+i+4]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4)&&(节点邻居数量[3*a+i+4]==4)&&(节点邻居数[4*a+i]==4)&&(节点邻居数[4*a+i+1]==4)&&(节点邻居数[4*a+i+2]==4)&&(节点邻居数[4*a+i+3]==4)&&(节点邻居数量[4*a+i+4]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点的连接,形成6x6正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[i+4]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[a+i+4]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[2*a+i+4]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;平铺[3*a+i+4]=0;平铺[4*a+i]=0;平铺[4*a+i+1]=0;平铺[4*a+i+2]=0;平铺[4*a+i+3]=0;平铺[4*a+i+4]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}/*确定所有涉及1x1、2x2、3x3、4x4、5x5和6x6正方形的瓷砖*/最大平方=((a-1)/6)*((b-1)/6);firstTiling=1;lastTiling=瓷砖数量-1;for(numberOfSquares=1;numberOfSquares<=maxSquares;number OfSqueres++){for(tilingIndex=firstTiling;tilingIndex<=lastTiling,tilingIndexe++){对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数量[i+4]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数量[a+i+4]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[2*a+i+4]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4)&&(节点邻居数量[3*a+i+4]==4)&&(节点邻居数[4*a+i]==4)&&(节点邻居数[4*a+i+1]==4)&&(节点邻居数[4*a+i+2]==4)&&(节点邻居数[4*a+i+3]==4)&&(节点邻居数[4*a+i+4]==4){/*获取以前生成的平铺及其方形部分*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[tilingIndex][j];}对于(j=0;j<=maxSquareSize;j++){parts[j]=partSets[tilingPartSet[tilingIndex]][j];}if((平铺[i-a-1]==1)&&(平铺[i-a]==1)&&(平铺[i-a+1]==1)&&(平铺[i-a+2]==1)&&(平铺[i-a+3]==1)&&(平铺[i-a+4]==1)&&(平铺[i-a+5]==1)&&(平铺[i-1]==1)&&(平铺[i]==1)&&(平铺[i+1]==1)&&(平铺[i+2]==1)&&(平铺[i+3]==1)&&(平铺[i+4]==1)&&(平铺[i+5]==1)&&(平铺[i+a-1]==1)&&(平铺[i+a]==1)&&(平铺[i+a+1]==1)&&(平铺[i+a+2]==1)&&(平铺[i+a+3]==1)&&(平铺[i+a+4]==1)&&(平铺[i+a+5]==1)&&(平铺[i+2*a-1]==1)&&(平铺[i+2*a]==1)&&(平铺[i+2*a+1]==1)&&(平铺[i+2*a+2]==1)&&(平铺[i+2*a+3]==1)&&(平铺[i+2*a+4]==1)&&(平铺[i+2*a+5]==1)&&(平铺[i+3*a-1]==1)&&(平铺[i+3*a]==1)&&(平铺[i+3*a+1]==1)&&(平铺[i+3*a+2]==1)&&(平铺[i+3*a+3]==1)&&(平铺[i+3*a+4]==1)&&(平铺[i+3*a+5]==1)&&(平铺[i+4*a-1]==1)&&(平铺[i+4*a]==1)&&(平铺[i+4*a+1]==1)&&(平铺[i+4*a+2]==1)&&(平铺[i+4*a+3]==1)&&(平铺[i+4*a+4]==1)&&(平铺[i+4*a+5]==1)&&(瓷砖[i+5*a-1]==1)&&(平铺[i+5*a]==1)&&(平铺[i+5*a+1]==1)&&(平铺[i+5*a+2]==1)&&(平铺[i+5*a+3]==1)&&(平铺[i+5*a+4]==1)&&(平铺[i+5*a+5]==1){/*消除内部节点的连接,形成6x6正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[i+4]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[a+i+4]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[2*a+i+4]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;平铺[3*a+i+4]=0;平铺[4*a+i]=0;平铺[4*a+i+1]=0;平铺[4*a+i+2]=0;平铺[4*a+i+3]=0;平铺[4*a+i+4]=0;/*将瓷砖与其他相关瓷砖进行比较,以防止重复*/重复=假;for(k=最后平铺;k<=平铺数;k++){n=0;对于(l=0;l<节点数;l++){if(平铺[l]==平铺列表[k][l]){n=n+1;}}如果(n==节点数){duplicate=true;}}if(重复==false){/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}/*形成方形部件*/部件[1]=部件[1]-36;部件[6]=部件[6]+1;对于(j=0;j<=maxSquareSize;j++){if(parts[j]!=partSets[numberOfPartSets-1][j]){断裂;}}如果(j<maxSquareSize){零件集数量++;对于(j=0;j<=maxSquareSize;j++){partSets[numberOfPartSets-1][j]=部件[j];}}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}}/*更新上下平铺索引*/firstTiling=lastTiling+1;lastTiling=瓷砖数量-1;}}如果(最大平方大小>7){/*确定所有涉及((a-1)(b-1)-49)1x1正方形和1 7x7正方形的瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}部件[1]=格子面积-49;部件[7]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数量[i+4]==4)&&(节点邻居数量[i+5]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数[a+i+4]==4)&&(节点邻居数[a+i+5]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[2*a+i+4]==4)&&(节点邻居数量[2*a+i+5]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4)&&(节点邻居数量[3*a+i+4]==4)&&(节点邻居数量[3*a+i+5]==4)&&(节点邻居数[4*a+i]==4)&&(节点邻居数[4*a+i+1]==4)&&(节点邻居数[4*a+i+2]==4)&&(节点邻居数[4*a+i+3]==4)&&(节点邻居数[4*a+i+4]==4)&&(节点邻居数[4*a+i+5]==4)&&(节点邻居数[5*a+i]==4)&&(节点邻居数[5*a+i+1]==4)&&(节点邻居数[5*a+i+2]==4)&&(节点邻居数[5*a+i+3]==4)&&(节点邻居数量[5*a+i+4]==4)&&(节点邻居数[5*a+i+5]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点的连接,形成一个7x7的正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[i+4]=0;平铺[i+5]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[a+i+4]=0;平铺[a+i+5]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[2*a+i+4]=0;平铺[2*a+i+5]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;平铺[3*a+i+4]=0;平铺[3*a+i+5]=0;平铺[4*a+i]=0;平铺[4*a+i+1]=0;平铺[4*a+i+2]=0;平铺[4*a+i+3]=0;平铺[4*a+i+4]=0;平铺[4*a+i+5]=0;平铺[5*a+i]=0;平铺[5*a+i+1]=0;平铺[5*a+i+2]=0;平铺[5*a+i+3]=0;平铺[5*a+i+4]=0;平铺[5*a+i+5]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}/*确定所有涉及1x1、2x2、3x3、4x4、5x5、6x6和7x7正方形的瓷砖*/最大平方=((a-1)/7)*((b-1)/7);firstTiling=1;lastTiling=瓷砖数量-1;for(numberOfSquares=1;numberOfSquares<=maxSquares;number OfSqueres++){for(tilingIndex=firstTiling;tilingIndex<=lastTiling,tilingIndexe++){对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数量[i+4]==4)&&(节点邻居数量[i+5]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数[a+i+4]==4)&&(节点邻居数[a+i+5]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[2*a+i+4]==4)&&(节点邻居数量[2*a+i+5]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4)&&(节点邻居数量[3*a+i+4]==4)&&(节点邻居数量[3*a+i+5]==4)&&(节点邻居数[4*a+i]==4)&&(节点邻居数[4*a+i+1]==4)&&(节点邻居数[4*a+i+2]==4)&&(节点邻居数[4*a+i+3]==4)&&(节点邻居数[4*a+i+4]==4)&&(节点邻居数[4*a+i+5]==4)&&(节点邻居数[5*a+i]==4)&&(节点邻居数[5*a+i+1]==4)&&(节点邻居数[5*a+i+2]==4)&&(节点邻居数[5*a+i+3]==4)&&(节点邻居数[5*a+i+4]==4)&&(节点邻居数量[5*a+i+5]==4)){/*获取以前生成的平铺及其方形部分*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[tilingIndex][j];}对于(j=0;j<=maxSquareSize;j++){parts[j]=partSets[tilingPartSet[tilingIndex]][j];}if((平铺[i-a-1]==1)&&(平铺[i-a]==1)&&(平铺[i-a+1]==1)&&(平铺[i-a+2]==1)&&(平铺[i-a+3]==1)&&(平铺[i-a+4]==1)&&(平铺[i-a+5]==1)&&(平铺[i-a+6]==1)&&(平铺[i-1]==1)&&(平铺[i]==1)&&(平铺[i+1]==1)&&(平铺[i+2]==1)&&(平铺[i+3]==1)&&(平铺[i+4]==1)&&(平铺[i+5]==1)&&(平铺[i+6]==1)&&(平铺[i+a-1]==1)&&(平铺[i+a]==1)&&(平铺[i+a+1]==1)&&(平铺[i+a+2]==1)&&(平铺[i+a+3]==1)&&(平铺[i+a+4]==1)&&(平铺[i+a+5]==1)&&(平铺[i+a+6]==1)&&(平铺[i+2*a-1]==1)&&(平铺[i+2*a]==1)&&(平铺[i+2*a+1]==1)&&(平铺[i+2*a+2]==1)&&(平铺[i+2*a+3]==1)&&(平铺[i+2*a+4]==1)&&(平铺[i+2*a+5]==1)&&(平铺[i+2*a+6]==1)&&(平铺[i+3*a-1]==1)&&(平铺[i+3*a]==1)&&(平铺[i+3*a+1]==1)&&(平铺[i+3*a+2]==1)&&(平铺[i+3*a+3]==1)&&(平铺[i+3*a+4]==1)&&(平铺[i+3*a+5]==1)&&(平铺[i+3*a+6]==1)&&(平铺[i+4*a-1]==1)&&(平铺[i+4*a]==1)&&(平铺[i+4*a+1]==1)&&(平铺[i+4*a+2]==1)&&(平铺[i+4*a+3]==1)&&(平铺[i+4*a+4]==1)&&(平铺[i+4*a+5]==1)&&(平铺[i+4*a+6]==1)&&(瓷砖[i+5*a-1]==1)&&(平铺[i+5*a]==1)&&(平铺[i+5*a+1]==1)&&(平铺[i+5*a+2]==1)&&(平铺[i+5*a+3]==1)&&(平铺[i+5*a+4]==1)&&(平铺[i+5*a+5]==1)&&(平铺[i+5*a+6]==1)&&(瓷砖[i+6*a-1]==1)&&(平铺[i+6*a]==1)&&(平铺[i+6*a+1]==1)&&(平铺[i+6*a+2]==1)&&(平铺[i+6*a+3]==1)&&(平铺[i+6*a+4]==1)&&(平铺[i+6*a+5]==1)&&(平铺[i+6*a+6]==1){/*消除指定的内部节点与其邻居的所有链接,以形成一个7x7的正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[i+4]=0;平铺[i+5]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[a+i+4]=0;平铺[a+i+5]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[2*a+i+4]=0;平铺[2*a+i+5]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;平铺[3*a+i+4]=0;平铺[3*a+i+5]=0;平铺[4*a+i]=0;平铺[4*a+i+1]=0;平铺[4*a+i+2]=0;平铺[4*a+i+3]=0;平铺[4*a+i+4]=0;平铺[4*a+i+5]=0;平铺[5*a+i]=0;平铺[5*a+i+1]=0;平铺[5*a+i+2]=0;平铺[5*a+i+3]=0;平铺[5*a+i+4]=0;平铺[5*a+i+5]=0;/*将瓷砖与其他相关瓷砖进行比较,以防止重复*/重复=假;for(k=最后平铺;k<=平铺数;k++){n=0;对于(l=0;l<节点数;l++){if(平铺[l]==平铺列表[k][l]){n=n+1;}}如果(n==节点数){duplicate=true;}}if(重复==false){/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}/*形成方形部件*/部件[1]=部件[1]-49;部件[7]=部件[7]+1;对于(j=0;j<=maxSquareSize;j++){if(parts[j]!=partSets[numberOfPartSets-1][j]){断裂;}}如果(j<maxSquareSize){零件集数量++;对于(j=0;j<=maxSquareSize;j++){partSets[numberOfPartSets-1][j]=部件[j];}}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}}/*更新上下平铺索引*/firstTiling=lastTiling+1;lastTiling=瓷砖数量-1;}}如果(maxSquareSize>8){/*确定涉及((a-1)(b-1)-64)1x1正方形和1 8x8正方形的所有瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}部件[1]=格子面积-64;部件[8]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数量[i+4]==4)&&(节点邻居数量[i+5]==4)&&(节点邻居数量[i+6]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数[a+i+4]==4)&&(节点邻居数[a+i+5]==4)&&(节点邻居数[a+i+6]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[2*a+i+4]==4)&&(节点邻居数量[2*a+i+5]==4)&&(节点邻居数量[2*a+i+6]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4)&&(节点邻居数量[3*a+i+4]==4)&&(节点邻居数量[3*a+i+5]==4)&&(节点邻居数量[3*a+i+6]==4)&&(节点邻居数[4*a+i]==4)&&(节点邻居数量[4*a+i+1]==4)&&(节点邻居数[4*a+i+2]==4)&&(节点邻居数[4*a+i+3]==4)&&(节点邻居数[4*a+i+4]==4)&&(节点邻居数[4*a+i+5]==4)&&(节点邻居数[4*a+i+6]==4)&&(节点邻居数[5*a+i]==4)&&(节点邻居数[5*a+i+1]==4)&&(节点邻居数[5*a+i+2]==4)&&(节点邻居数[5*a+i+3]==4)&&(节点邻居数[5*a+i+4]==4)&&(节点邻居数[5*a+i+5]==4)&&(节点邻居数[5*a+i+6]==4)&&(节点邻居数[6*a+i]==4)&&(节点邻居数[6*a+i+1]==4)&&(节点邻居数量[6*a+i+2]==4)&&(节点邻居数[6*a+i+3]==4)&&(节点邻居数[6*a+i+4]==4)&&(节点邻居数[6*a+i+5]==4)&&(节点邻居数[6*a+i+6]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点的连接,形成8x8正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[i+4]=0;平铺[i+5]=0;平铺[i+6]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[a+i+4]=0;平铺[a+i+5]=0;平铺[a+i+6]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[2*a+i+4]=0;平铺[2*a+i+5]=0;平铺[2*a+i+6]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;平铺[3*a+i+4]=0;平铺[3*a+i+5]=0;平铺[3*a+i+6]=0;平铺[4*a+i]=0;平铺[4*a+i+1]=0;平铺[4*a+i+2]=0;平铺[4*a+i+3]=0;平铺[4*a+i+4]=0;平铺[4*a+i+5]=0;平铺[4*a+i+6]=0;平铺[5*a+i]=0;平铺[5*a+i+1]=0;平铺[5*a+i+2]=0;平铺[5*a+i+3]=0;平铺[5*a+i+4]=0;平铺[5*a+i+5]=0;平铺[5*a+i+6]=0;平铺[6*a+i]=0;平铺[6*a+i+1]=0;平铺[6*a+i+2]=0;平铺[6*a+i+3]=0;平铺[6*a+i+4]=0;平铺[6*a+i+5]=0;平铺[6*a+i+6]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}/*确定涉及1x1、2x2、3x3、4x4、5x5、6x6、7x7和8x8正方形的所有瓷砖*/最大平方=((a-1)/8)*((b-1)/8);firstTiling=1;lastTiling=瓷砖数量-1;for(numberOfSquares=1;numberOfSquares<=maxSquares;number OfSqueres++){for(tilingIndex=firstTiling;tilingIndex<=lastTiling,tilingIndexe++){对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数量[i+4]==4)&&(节点邻居数量[i+5]==4)&&(节点邻居数量[i+6]==4)&&(节点邻居数[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数[a+i+4]==4)&&(节点邻居数[a+i+5]==4)&&(节点邻居数[a+i+6]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[2*a+i+4]==4)&&(节点邻居数量[2*a+i+5]==4)&&(节点邻居数量[2*a+i+6]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4)&&(节点邻居数量[3*a+i+4]==4)&&(节点邻居数量[3*a+i+5]==4)&&(节点邻居数量[3*a+i+6]==4)&&(节点邻居数[4*a+i]==4)&&(节点邻居数[4*a+i+1]==4)&&(节点邻居数[4*a+i+2]==4)&&(节点邻居数[4*a+i+3]==4)&&(节点邻居数[4*a+i+4]==4)&&(节点邻居数[4*a+i+5]==4)&&(节点邻居数[4*a+i+6]==4)&&(节点邻居数[5*a+i]==4)&&(节点邻居数[5*a+i+1]==4)&&(节点邻居数[5*a+i+2]==4)&&(节点邻居数[5*a+i+3]==4)&&(节点邻居数[5*a+i+4]==4)&&(节点邻居数量[5*a+i+5]==4)&&(节点邻居数[5*a+i+6]==4)&&(节点邻居数量[6*a+i]==4)&&(节点邻居数[6*a+i+1]==4)&&(节点邻居数[6*a+i+2]==4)&&(节点邻居数[6*a+i+3]==4)&&(节点邻居数[6*a+i+4]==4)&&(节点邻居数[6*a+i+5]==4)&&(节点邻居数[6*a+i+6]==4){/*获取以前生成的平铺及其方形部分*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[tilingIndex][j];}对于(j=0;j<=maxSquareSize;j++){parts[j]=partSets[tilingPartSet[tilingIndex]][j];}if((平铺[i-a-1]==1)&&(平铺[i-a]==1)&&(平铺[i-a+1]==1)&&(平铺[i-a+2]==1)&&(平铺[i-a+3]==1)&&(平铺[i-a+4]==1)&&(平铺[i-a+5]==1)&&(平铺[i-a+6]==1)&&(平铺[i-a+7]==1)&&(平铺[i-1]==1)&&(平铺[i]==1)&&(平铺[i+1]==1)&&(平铺[i+2]==1)&&(平铺[i+3]==1)&&(平铺[i+4]==1)&&(平铺[i+5]==1)&&(平铺[i+6]==1)&&(平铺[i+7]==1)&&(平铺[i+a-1]==1)&&(平铺[i+a]==1)&&(平铺[i+a+1]==1)&&(平铺[i+a+2]==1)&&(平铺[i+a+3]==1)&&(平铺[i+a+4]==1)&&(平铺[i+a+5]==1)&&(平铺[i+a+6]==1)&&(平铺[i+a+7]==1)&&(平铺[i+2*a-1]==1)&&(平铺[i+2*a]==1)&&(平铺[i+2*a+1]==1)&&(平铺[i+2*a+2]==1)&&(平铺[i+2*a+3]==1)&&(平铺[i+2*a+4]==1)&&(平铺[i+2*a+5]==1)&&(平铺[i+2*a+6]==1)&&(平铺[i+2*a+7]==1)&&(平铺[i+3*a-1]==1)&&(平铺[i+3*a]==1)&&(平铺[i+3*a+1]==1)&&(平铺[i+3*a+2]==1)&&(平铺[i+3*a+3]==1)&&(平铺[i+3*a+4]==1)&&(平铺[i+3*a+5]==1)&&(平铺[i+3*a+6]==1)&&(平铺[i+3*a+7]==1)&&(平铺[i+4*a-1]==1)&&(平铺[i+4*a]==1)&&(平铺[i+4*a+1]==1)&&(平铺[i+4*a+2]==1)&&(平铺[i+4*a+3]==1)&&(平铺[i+4*a+4]==1)&&(平铺[i+4*a+5]==1)&&(平铺[i+4*a+6]==1)&&(平铺[i+4*a+7]==1)&&(瓷砖[i+5*a-1]==1)&&(平铺[i+5*a]==1)&&(平铺[i+5*a+1]==1)&&(平铺[i+5*a+2]==1)&&(平铺[i+5*a+3]==1)&&(平铺[i+5*a+4]==1)&&(平铺[i+5*a+5]==1)&&(平铺[i+5*a+6]==1)&&(平铺[i+5*a+7]==1)&&(瓷砖[i+6*a-1]==1)&&(平铺[i+6*a]==1)&&(平铺[i+6*a+1]==1)&&(平铺[i+6*a+2]==1)&&(平铺[i+6*a+3]==1)&&(平铺[i+6*a+4]==1)&&(平铺[i+6*a+5]==1)&&(平铺[i+6*a+6]==1)&&(平铺[i+6*a+7]==1)&&(平铺[i+7*a-1]==1)&&(平铺[i+7*a]==1)&&(平铺[i+7*a+1]==1)&&(平铺[i+7*a+2]==1)&&(平铺[i+7*a+3]==1)&&(平铺[i+7*a+4]==1)&&(平铺[i+7*a+5]==1)&&(平铺[i+7*a+6]==1)&&(平铺[i+7*a+7]==1){/*消除指定的内部节点与其相邻节点的所有链接,以形成8x8正方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[i+4]=0;平铺[i+5]=0;平铺[i+6]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[a+i+4]=0;平铺[a+i+5]=0;平铺[a+i+6]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[2*a+i+4]=0;平铺[2*a+i+5]=0;平铺[2*a+i+6]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;平铺[3*a+i+4]=0;平铺[3*a+i+5]=0;平铺[3*a+i+6]=0;平铺[4*a+i]=0;平铺[4*a+i+1]=0;平铺[4*a+i+2]=0;平铺[4*a+i+3]=0;平铺[4*a+i+4]=0;平铺[4*a+i+5]=0;平铺[4*a+i+6]=0;平铺[5*a+i]=0;平铺[5*a+i+1]=0;平铺[5*a+i+2]=0;平铺[5*a+i+3]=0;平铺[5*a+i+4]=0;平铺[5*a+i+5]=0;平铺[5*a+i+6]=0;平铺[6*a+i]=0;平铺[6*a+i+1]=0;平铺[6*a+i+2]=0;平铺[6*a+i+3]=0;平铺[6*a+i+4]=0;平铺[6*a+i+5]=0;平铺[6*a+i+6]=0;/*将瓷砖与其他相关瓷砖进行比较,以防止重复*/重复=假;for(k=最后平铺;k<=平铺数;k++){n=0;对于(l=0;l<节点数;l++){if(平铺[l]==平铺列表[k][l]){n=n+1;}}如果(n==节点数){duplicate=true;}}if(重复==false){/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}/*形成方形部件*/部件[1]=部件[1]-64;部件[8]=部件[8]+1;对于(j=0;j<=maxSquareSize;j++){if(parts[j]!=partSets[numberOfPartSets-1][j]){断裂;}}如果(j<maxSquareSize){零件集数量++;对于(j=0;j<=maxSquareSize;j++){partSets[numberOfPartSets-1][j]=部件[j];}}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}}/*更新上下平铺索引*/firstTiling=lastTiling+1;lastTiling=瓷砖数量-1;}}如果(maxSquareSize>9){/*确定涉及((a-1)(b-1)-81)1x1正方形和1 9x9正方形的所有瓷砖*//*指定方形零件*/对于(j=0;j<=maxSquareSize;j++){部件[j]=0;}部件[1]=格子面积-81;部件[9]=1;零件集数量++;对于(i=0;i<=maxSquareSize;i++){partSets[numberOfPartSets-1][i]=部件[i];}对于(i=0;i<numberOfNodes;i++){if((numberOfNodeNeighbors[i]==4)&&(节点邻居数量[i+1]==4)&&(节点邻居数量[i+2]==4)&&(节点邻居数量[i+3]==4)&&(节点邻居数量[i+4]==4)&&(节点邻居数量[i+5]==4)&&(节点邻居数量[i+6]==4)&&(节点邻居数量[i+7]==4)&&(节点邻居数量[a+i]==4)&&(节点邻居数[a+i+1]==4)&&(节点邻居数[a+i+2]==4)&&(节点邻居数[a+i+3]==4)&&(节点邻居数[a+i+4]==4)&&(节点邻居数[a+i+5]==4)&&(节点邻居数[a+i+6]==4)&&(节点邻居数[a+i+7]==4)&&(节点邻居数量[2*a+i]==4)&&(节点邻居数量[2*a+i+1]==4)&&(节点邻居数量[2*a+i+2]==4)&&(节点邻居数量[2*a+i+3]==4)&&(节点邻居数量[2*a+i+4]==4)&&(节点邻居数量[2*a+i+5]==4)&&(节点邻居数量[2*a+i+6]==4)&&(节点邻居数量[2*a+i+7]==4)&&(节点邻居数量[3*a+i]==4)&&(节点邻居数量[3*a+i+1]==4)&&(节点邻居数量[3*a+i+2]==4)&&(节点邻居数量[3*a+i+3]==4)&&(节点邻居数量[3*a+i+4]==4)&&(节点邻居数量[3*a+i+5]==4)&&(节点邻居数量[3*a+i+6]==4)&&(节点邻居数量[3*a+i+7]==4)&&(节点邻居数[4*a+i]==4)&&(节点邻居数[4*a+i+1]==4)&&(节点邻居数[4*a+i+2]==4)&&(节点邻居数[4*a+i+3]==4)&&(节点邻居数[4*a+i+4]==4)&&(节点邻居数[4*a+i+5]==4)&&(节点邻居数[4*a+i+6]==4)&&(节点邻居数[4*a+i+7]==4)&&(节点邻居数[5*a+i]==4)&&(节点邻居数[5*a+i+1]==4)&&(节点邻居数[5*a+i+2]==4)&&(节点邻居数[5*a+i+3]==4)&&(节点邻居数量[5*a+i+4]==4)&&(节点邻居数[5*a+i+5]==4)&&(节点邻居数量[5*a+i+6]==4)&&(节点邻居数[5*a+i+7]==4)&&(节点邻居数[6*a+i]==4)&&(节点邻居数[6*a+i+1]==4)&&(节点邻居数[6*a+i+2]==4)&&(节点邻居数[6*a+i+3]==4)&&(节点邻居数[6*a+i+4]==4)&&(节点邻居数[6*a+i+5]==4)&&(节点邻居数[6*a+i+6]==4)&&(节点邻居数[6*a+i+7]==4)&&(节点邻居数量[7*a+i]==4)&&(节点邻居数量[7*a+i+1]==4)&&(节点邻居数量[7*a+i+2]==4)&&(节点邻居数量[7*a+i+3]==4)&&(节点邻居数量[7*a+i+4]==4)&&(节点邻居数量[7*a+i+5]==4)&&(节点邻居数量[7*a+i+6]==4)&&(节点邻居数[7*a+i+7]==4){/*开始构建所有边都存在的平铺*/对于(j=0;j<节点数;j++){瓷砖[j]=1;}/*消除内部节点的连接,形成9x9方形*/平铺[i]=0;平铺[i+1]=0;平铺[i+2]=0;平铺[i+3]=0;平铺[i+4]=0;平铺[i+5]=0;平铺[i+6]=0;平铺[i+7]=0;平铺[a+i]=0;平铺[a+i+1]=0;平铺[a+i+2]=0;平铺[a+i+3]=0;平铺[a+i+4]=0;平铺[a+i+5]=0;平铺[a+i+6]=0;平铺[a+i+7]=0;平铺[2*a+i]=0;平铺[2*a+i+1]=0;平铺[2*a+i+2]=0;平铺[2*a+i+3]=0;平铺[2*a+i+4]=0;平铺[2*a+i+5]=0;平铺[2*a+i+6]=0;平铺[2*a+i+7]=0;平铺[3*a+i]=0;平铺[3*a+i+1]=0;平铺[3*a+i+2]=0;平铺[3*a+i+3]=0;平铺[3*a+i+4]=0;平铺[3*a+i+5]=0;平铺[3*a+i+6]=0;平铺[3*a+i+7]=0;平铺[4*a+i]=0;平铺[4*a+i+1]=0;平铺[4*a+i+2]=0;平铺[4*a+i+3]=0;平铺[4*a+i+4]=0;平铺[4*a+i+5]=0;平铺[4*a+i+6]=0;平铺[4*a+i+7]=0;平铺[5*a+i]=0;平铺[5*a+i+1]=0;平铺[5*a+i+2]=0;平铺[5*a+i+3]=0;平铺[5*a+i+4]=0;平铺[5*a+i+5]=0;平铺[5*a+i+6]=0;平铺[5*a+i+7]=0;平铺[6*a+i]=0;平铺[6*a+i+1]=0;平铺[6*a+i+2]=0;平铺[6*a+i+3]=0;平铺[6*a+i+4]=0;平铺[6*a+i+5]=0;平铺[6*a+i+6]=0;平铺[6*a+i+7]=0;平铺[7*a+i]=0;平铺[7*a+i+1]=0;平铺[7*a+i+2]=0;平铺[7*a+i+3]=0;平铺[7*a+i+4]=0;平铺[7*a+i+5]=0;平铺[7*a+i+6]=0;平铺[7*a+i+7]=0;/*记录平铺*/瓷砖数量++;cout<<平铺数量<<endl;对于(j=0;j<节点数;j++){平铺列表[numberOfTilings-1][j]=平铺[j];}tilingPartSet[numberOfTilings-1]=零件集数量-1;}}}}/*平铺的输出数量*/文件<<endl;file<<“Number of tilings=”<<numberOfTilings<<endl<<endl;/*确定不等瓷砖*//*初始化指示器阵列*/对于(i=0;i<瓷砖数量;i++){平铺Ind[i]=0;}/*计算旋转和反射阵列*/如果(a==b){/*向左旋转90度*/对于(m=0;m<b;m++){对于(n=0;n<a;n++){旋转090[m*a+n]=(a-n-1)*a+m;}}}/*向左旋转180度*/对于(m=0;m<b;m++){对于(n=0;n<a;n++){旋转180[m*a+n]=(b-m)*a-(n+1);}}如果(a==b){/*向左旋转270度*/对于(m=0;m<b;m++){对于(n=0;n<a;n++){旋转270[m*a+n]=(n+1)*a-(m+1);}}}/*水平反射*/对于(m=0;m<b;m++){对于(n=0;n<a;n++){反射水平[m*a+n]=(b-m-1)*a+n;}}/*垂直反射*/对于(m=0;m<b;m++){对于(n=0;n<a;n++){反射垂直[m*a+n]=(m+1)*a-(n+1);}}如果(a==b){/*水平反射,然后旋转90度=对角反射*/对于(m=0;m<b;m++){对于(n=0;n<a;n++){参考水平旋转90[m*a+n]=m+a*n;}}/*垂直反射,然后旋转90度=反向反射*/对于(m=0;m<b;m++){对于(n=0;n<a;n++){参考垂直旋转90[m*a+n]=(a-n)*a-(m+1);}}}h=0;while(h<平铺数量){if(平铺Ind[h]==0){平铺Ind[h]++;如果(a==b){/*将平铺旋转90度*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[h][rotate090[j]];}/*在列表中查找此平铺*/对于(i=h;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){如果(平铺列表[i][j]!=平铺[j])中断;}if((j==节点数)&&(平铺Ind[i]==0){平铺Ind[i]=-1;平铺Ind[h]++;断裂;}}}/*将平铺旋转180度*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[h][rotate180[j]];}/*在列表中查找此平铺*/对于(i=h;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){如果(平铺列表[i][j]!=平铺[j])中断;}if((j==节点数)&&(平铺Ind[i]==0){平铺Ind[i]=-1;平铺Ind[h]++;断裂;}}如果(a==b){/*将平铺旋转270度*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[h][rotate270[j]];}/*在列表中查找此平铺*/对于(i=h;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){如果(平铺列表[i][j]!=平铺[j])中断;}if((j==节点数)&&(平铺Ind[i]==0){平铺Ind[i]=-1;平铺Ind[h]++;断裂;}}}/*水平反射平铺*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[h][reflectHoriz[j]];}/*在列表中查找此平铺*/对于(i=h;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){如果(平铺列表[i][j]!=平铺[j])中断;}if((j==节点数)&&(平铺Ind[i]==0){平铺Ind[i]=-1;平铺Ind[h]++;断裂;}}/*垂直反射瓷砖*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[h][reflectVert[j]];}/*在列表中查找此平铺*/对于(i=h;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){如果(平铺列表[i][j]!=平铺[j])中断;}if((j==节点数)&&(平铺Ind[i]==0){平铺Ind[i]=-1;平铺Ind[h]++;断裂;}}如果(a==b){/*水平反射平铺,然后旋转90度=对角反射*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[h][refHorizRot90[j]];}/*在列表中查找此平铺*/对于(i=h;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){如果(平铺列表[i][j]!=平铺[j])中断;}if((j==节点数)&&(平铺Ind[i]==0){平铺Ind[i]=-1;平铺Ind[h]++;断裂;}}/*垂直反射瓷砖,然后旋转90度=反对角线反射*/对于(j=0;j<节点数;j++){平铺[j]=平铺列表[h][refVertRot90[j]];}/*在列表中查找此平铺*/对于(i=h;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){如果(平铺列表[i][j]!=平铺[j])中断;}if((j==节点数)&&(平铺Ind[i]==0){平铺Ind[i]=-1;平铺Ind[h]++;断裂;}}}}h++;}/*输出平铺*/对于(i=0;i<瓷砖数量;i++){对于(j=0;j<节点数;j++){文件<<tilingList[i][j];}文件<<endl;}文件<<endl<<endl;/*具有每个对称度的平铺的输出计数*/对于(i=0;i<10;i++){计数[i]=0;}对于(h=0;h<瓷砖数量;h++){count[tilingInd[h]+1]++;}file<<“不同图像数的平铺数”<<endl<<endl;对于(i=-1;i<9;i++){文件<<i<<“”;}文件<<endl;对于(i=0;i<10;i++){文件<<计数[i]<<“”;}文件<<endl<<endl;/*不相等平铺的输出数量*/n=0;对于(i=2;i<10;i++){n=n+计数[i];}file<<“不等平铺数=”<<n<<endl<<endl;/*形成每个无限制平铺、不等平铺和未连接到任何邻居的部分集中节点数的直方图*/对于(i=0;i<=节点数;i++){numberOfZeros[i]=0;/*每个不受限制的平铺中0的数量的直方图*/numberOfZerosInequivalent[i]=0;/*每个不等平铺中0个数的直方图*/numberOfZerosPartSet[i]=0;/*每个零件集中0的数量直方图*/}对于(i=0;i<瓷砖数量;i++){zeroCount=0;对于(j=0;j<节点数;j++){if(平铺列表[i][j]==0){zeroCount++;}}numberOfZeros[zeroCount]++;if(平铺Ind[i]>=0){numberOfZerosInequivalent[zeroCount]++;}}对于(i=0;i<numberOfPartSets;i++){zeroCount=0;对于(j=1;j<=a;j++){zeroCount=zeroCount+部件集[i][j]*(j-1)*(j-1-);}numberOfZerosPartSet[zeroCount]++;}文件<<“包含不同零数(Z)的零件集(P)、不等(I)和无限制(U)平铺数”<<endl<<end1;文件<<“Z P I U”<<endl<<endl;对于(i=0;i<=(a-2)*(a-2);i++){文件<<“”<<i<<“;}文件<<endl<<endl;/*生成方形部件统计信息*/对于(i=0;i<maxPartSets;i++){partSetCount[i]=0;partSetCountInequivalent[i]=0;}对于(i=0;i<瓷砖数量;i++){partSetCount[tilingPartSet[i]]++;if(平铺Ind[i]>=0){部件集合计数不等效[平铺部件集合[i]]++;}}文件<<“每一组不同正方形部分的不等(I)和无限制(U)平铺数”<<endl<<end1;文件<<“方形面”;对于(i=1;i<=a;i++){文件<<i<<“”;}文件<<endl;文件<<“计数”<<endl;文件<<“I U”<<endl;对于(i=0;i<numberOfPartSets;i++){文件<<“”<<partSetCountInequivalent[i]<<“;对于(j=1;j<=a;j++){文件<<部件集[i][j]<<“”;}文件<<endl;}文件<<endl<<endl;/*零件集的输出编号*/file<<“不同零件集的数量=”<<numberOfPartSets<<endl<<endl;/*释放分配的内存*/对于(i=0;i<最大平铺;i++){空闲(平铺列表[i]);}free(平铺列表);cout<<endl<<“程序完成”<<endl;文件<<endl<<“程序完成”<<endl;完成;错误:cout<<endl<<“输入错误:程序终止”<<endl;文件<<endl<<“输入错误:程序终止”<<endl;完成:file.close();返回0;}