回复 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; }