【程序】 # include int delta_i[ ]={2,1,-1,-2,-2,-1,1,2}; int delta_j[ ]={1,2,2,1,-1,-2,-2,-1}; int board[8][8]; int exitn(int i,int j,int s,int a[ ]) { int i1,j1,k,count; for (count=k=0;k<8;k++) { i1=i+delta_i[(s+k)%8]; j1=i+delta_j[(s+k)%8]; if (i1>=0&&i1<8&&j1>=0&&j1<8&&board[I1][j1]==0) a[count++]=(s+k)%8; } return count; }
int next(int i,int j,int s) { int m,k,mm,min,a[8],b[8],temp; m=exitn(i,j,s,a); if (m==0) return –1; for (min=9,k=0;k { temp=exitn(I+delta_i[a[k]],j+delta_j[a[k]],s,b); if (temp { min=temp; kk=a[k]; } } return kk; }
void main() { int sx,sy,i,j,step,no,start; for (sx=0;sx<8;sx++) for (sy=0;sy<8;sy++) { start=0; do { for (i=0;i<8;i++) for (j=0;j<8;j++) board[j]=0; board[sx][sy]=1; I=sx; j=sy; For (step=2;step<64;step++) { if ((no=next(i,j,start))==-1) break; I+=delta_i[no]; j+=delta_j[no]; board[j]=step; } if (step>64) break; start++; } while(step<=64) for (i=0;i<8;i++) { for (j=0;j<8;j++) printf(“%4d”,board[j]); printf(“\n\n”); } scanf(“%*c”); } }
的影响,我们给出大整数相乘的完整算法MULT如下: function MULT(X,Y,n); {X和Y为2个小于2n的整数,返回结果为X和Y的乘积XY} begin S=SIGN(X)*SIGN(Y); {S为X和Y的符号乘积} X=ABS(X); Y=ABS(Y); {X和Y分别取
绝对值
} if n=1 then if (X=1)and(Y=1) then return(S) else return(0) else begin A=X的左边n/2位; B=X的右边n/2位; C=Y的左边n/2位; D=Y的右边n/2位; ml=MULT(A,C,n/2); m2=MULT(A-B,D-C,n/2); m3=MULT(B,D,n/2); S=S*(m1*2n+(m1+m2+m3)*2n/2+m3); return(S); end; end; 上述二进制大整数乘法同样可应用于