要注意如果中点没有被用到,是不能连对边对角的。代码如下:
#include
#include
int main()
{
char a[100000][9],b[100000];
int hsum=9, lsum=0;
for(int i=0;i<9;++i)
{
for(int j=0;j<9;++j)a[i][j]=0;
a[i][i]=1;
b[i]=i;
}
for(int poi=2;poi<=4;++poi)
{
int newsum=hsum;
while(lsum
{
for(int i=0;i<9;++i)
{
if(a[lsum][i]==0 && (a[lsum][4]==1 || b[lsum]+i!=8))
{
memcpy(a[newsum],a[lsum],9*sizeof(char));
a[newsum][i]=1;
b[newsum]=i;
++newsum;
}
}
++lsum;
}
printf("%d点的数量为%d\n",poi,newsum-hsum);
hsum=newsum;
}
return 0;
}
答案是2208。