回复 10楼 azzbcc
好吧!其实我还没仔细看,你在看看吧!我觉得这个确实有点乱!
程序代码:#include <stdio.h>
int count;
int keda(int a,int cur,int s[]) //判断新的点和上一个点是否可以到达
{
int b=s[cur-1];
int ax,ay,bx,by;
ax=a/3;ay=a%3;
bx=b/3;by=b%3;
int dis=(ax-bx)*(ax-bx)+(ay-by)*(ay-by); //dis是距离的平方
if(dis==1||dis==2||dis==5)
return 1;
if(dis==4||dis==8)
{
int zx,zy;
zx=(ax+bx)/2;
zy=(ay+by)/2;
int ok=0;
for(int h=0;h<cur;h++)
if((zx*3+zy)==s[h])
ok=1;
if(ok==1)
return 1;
}
return 0;
}
void pailie(int s[],int cur)
{
if(cur>=4)
{
/*for(int m=0;m<cur;m++)
printf("%d ",s[m]+1);
putchar('\n');*/
count++;
}
for(int i=0;i<9;i++)
{
if(!cur)
{
s[cur]=i;
pailie(s,cur+1);
}
else
{
int ok=1;
for(int j=0;j<cur;j++)
if(i==s[j])
ok=0;
if(ok && keda(i,cur,s))
{
s[cur]=i;
pailie(s,cur+1);
}
}
}
}
int main()
{
int s[10]; //s保存已经用过的点
int cur=0; //cur记录s中点的数目
pailie(s,cur);
printf("%d",count);
return 0;
}